我一直在尝试用Session配置geospark,以便我可以在PySpark上使用空间应用程序。我遵循这个链接 &尝试运行下面提到的代码。
try:
import pyspark
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession, SQLContext
except ImportError as e:
raise ImportError('PySpark is not Configured')
print(f"PySpark Version : {pyspark.__version__}")
# Creating a Spark-Context
sc = SparkContext.getOrCreate(SparkConf().setMaster('local[*]').set("spark.ui.port", "4050"))
# Spark Builder
spark = SparkSession.builder.appName('GeoSparkDemo').config('spark.executor.memory', '5GB')\
.getOrCreate()
from geospark.register import upload_jars
from geospark.register import GeoSparkRegistrator
upload_jars()
GeoSparkRegistrator.registerAll(spark)当我运行这个文件时,它会给出以下错误。
回溯(最近一次调用):文件"c:\sourav\spark\code\geospark_demo.py",第29行,GeoSparkRegistrator.registerAll(火花)文件第26行,registerAll cls.register(火花)文件"C:\Users\user3.conda\envs\python37\lib\site-packages\geospark\register\geo_registrator.py",第31行,在寄存器返回spark._jvm.GeoSparkSQLRegistrator.registerAll(spark._jsparkSession) TypeError:'JavaPackage‘对象不可调用
我试图手动添加下面的jar文件到火花罐文件夹中。
·地理公园-1.3.1.jar·geospark sql_2.1-1.3.1.jar·geo_wrapper.jar
现在,前面的错误消失了&新的异常正在抛出,如下所示:
回溯(最近一次调用):文件"c:\sourav\spark\code\geospark_demo.py",第29行,GeoSparkRegistrator.registerAll(火花)文件第26行,registerAll cls.register(火花)文件"C:\Users\user3.conda\envs\python37\lib\site-packages\geospark\register\geo_registrator.py",第31行,在寄存器中返回spark._jvm.GeoSparkSQLRegistrator.registerAll(spark._jsparkSession) 文件"C:\Users\user3.conda\envs\python37\lib\site-packages\py4j\java_gateway.py",第1257行,call应答,self.gateway_client,self.target_id,self.name)文件"C:\sourav\spark\spark-2.4.7-bin-hadoop2.7\python\pyspark\sql\utils.py",第63行,在deco返回f(*a,**kw)文件"C:\Users\user3.conda\envs\python37\lib\site-packages\py4j\protocol.py",第328行,格式为get_return_value格式(target_id,".",名称),值) py4j.protocol.Py4JJavaError:调用z:org.datasyslab.geosparksql.utils.GeoSparkSQLRegistrator.registerAll.时出错::org.apache.spark.sql.catalyst.analysis.SimpleFunctionRegistry.registerFunction(Ljava/lang/String;Lscala/Function1;:java.lang.NoSuchMethodError在org.datasyslab.geosparksql.UDF.UdfRegistrator$$anonfun$registerAll$1.apply(UdfRegistrator.scala:29) at org.datasyslab.geosparksql.UDF.UdfRegistrator$$anonfun$registerAll$1.apply(UdfRegistrator.scala:29) at scala.collection.immutable.List.foreach(List.scala:392) at org.datasyslab.geosparksql.UDF.UdfRegistrator$.registerAll(UdfRegistrator.scala:29) at org.datasyslab.geosparksql.utils.GeoSparkSQLRegistrator$.registerAll(GeoSparkSQLRegistrator.scala:34) at org.datasyslab.geosparksql.utils.GeoSparkSQLRegistrator.registerAll(GeoSparkSQLRegistrator.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(Unknown源)在sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown源)在java.lang.reflect.Method.invoke(未知源)在py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) at py4j.Gateway.invoke(Gateway.java:282)在py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection。运行(GatewayConnection.java:238)在java.lang.Thread.run(未知源)
我发现这个链接也有类似的问题,我甚至尝试用下面的代码在星火配置文件中添加jars,但是似乎没有什么效果。
spark.driver.extraClassPath C:\sourav\spark\geosparkjar/*我使用Geospark 1.3.1、Java 8、Python3.7、ApacheSpark2.4.7,我的JAVA_HOME、SPARK_HOME设置正确,运行在windows 10上。
我怎样才能解决这个问题才能继续下去?如有任何帮助/建议,将不胜感激。
发布于 2021-05-28 15:50:58
GeoSpark目前可作为Apache使用。
对于类似的用法,我遵循以下说明:
安装apache-sedona
from pyspark.sql import SparkSession
from sedona.utils.adapter import Adapter
from sedona.register import SedonaRegistrator
from sedona.utils import KryoSerializer, SedonaKryoRegistrator
spark = SparkSession.builder.master("spark://test:7077").appName("sedonatest").
config("spark.serializer", KryoSerializer.getName). \
config("spark.kryo.registrator", SedonaKryoRegistrator.getName). \
config('spark.jars.packages',
'org.apache.sedona:sedona-python-adapter-3.0_2.12:1.0.0-incubating,'
'org.datasyslab:geotools-wrapper:geotools-24.0').getOrCreate()
SedonaRegistrator.registerAll(spark)
resultsDF = spark.sql("SELECT ST_PolygonFromText('-74.0428197,40.6867969,-74.0421975,40.6921336,-74.0508020,40.6912794,-74.0428197,40.6867969', ',') AS polygonshape")P.S :在火花提交过程中,在2罐以下通过- Jars选项:
https://stackoverflow.com/questions/65213369
复制相似问题