1

我一直在尝试使用 Spark 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(spark) 文件“C:\Users\user3.conda\envs\python37\lib \site-packages\geospark\register\geo_registrator.py”,第 26 行,在 registerAll cls.register(spark) 文件“C:\Users\user3.conda\envs\python37\lib\site-packages\geospark\register\ geo_registrator.py",第 31 行,在寄存器中返回 spark._jvm.GeoSparkSQLRegistrator.registerAll(spark._jsparkSession) TypeError: 'JavaPackage' object is not callable

我尝试在 spark jars 文件夹中手动添加以下 jar 文件

•geospark-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(spark) 文件“C:\Users\user3.conda\envs\python37\lib \site-packages\geospark\register\geo_registrator.py”,第 26 行,在 registerAll cls.register(spark) 文件“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 行,通话中 answer, 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 return f(*a, **kw) 文件“C:\Users\user3.conda\envs\python37\lib\site-packages\py4j\protocol.py”,第 328 行,get_return_value 格式(target_id,“。 ", name), value) py4j.protocol.Py4JJavaError: 调用 z:org.datasyslab.geosparksql.utils.GeoSparkSQLRegistrator.registerAll 时出错。: java.lang.NoSuchMethodError: org.apache.spark.sql.catalyst.analysis.SimpleFunctionRegistry.registerFunction(Ljava/lang/String;Lscala/Function1;)V at 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。

我发现这个链接有类似的问题,我什至尝试使用以下代码在 spark 配置文件中添加 jar,但似乎没有任何效果。

spark.driver.extraClassPath C:\sourav\spark\geosparkjar/*

我正在使用 Geospark 1.3.1、Java 8、Python 3.7、Apache Spark 2.4.7,我的 JAVA_HOME、SPARK_HOME 设置正确,我在 Windows 10 上运行。

我该如何解决这个问题以进一步进行?任何帮助/建议将不胜感激。

4

1 回答 1

2

GeoSpark 目前以 Apache Sedona 的形式提供。

对于类似的用例,我按照说明进行操作:

点安装 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")

PS:使用 --jars 选项在 spark 提交期间传递低于 2 个罐子:

于 2021-05-28T15:50:58.447 回答