TypeError:“JavaPackage”对象不可调用(spark.\u jvm)
我正在进行设置,在安装了所有先决条件之后,我正在运行非常基本的代码示例来测试它 从pyspark.sql导入SparkSession 从geo_pyspark.register导入geospark registor spark=SparkSession.builder\ 获取或创建 GeoSparkRegistrator.registerAllspark df=spark.sql选择st_GeomFromWKT'POINT6.0 52.0'作为geom df.show 我试着用python3 basic.py和spark submit basic.py运行它,两者都给出了以下错误:TypeError:“JavaPackage”对象不可调用(spark.\u jvm),java,python,apache-spark,java-package,geospark,Java,Python,Apache Spark,Java Package,Geospark,我正在进行设置,在安装了所有先决条件之后,我正在运行非常基本的代码示例来测试它 从pyspark.sql导入SparkSession 从geo_pyspark.register导入geospark registor spark=SparkSession.builder\ 获取或创建 GeoSparkRegistrator.registerAllspark df=spark.sql选择st_GeomFromWKT'POINT6.0 52.0'作为geom df.show 我试着用python3 b
Traceback (most recent call last):
File "/home/jessica/Downloads/geo_pyspark/basic.py", line 8, in <module>
GeoSparkRegistrator.registerAll(spark)
File "/home/jessica/Downloads/geo_pyspark/geo_pyspark/register/geo_registrator.py", line 22, in registerAll
cls.register(spark)
File "/home/jessica/Downloads/geo_pyspark/geo_pyspark/register/geo_registrator.py", line 27, in register
spark._jvm. \
TypeError: 'JavaPackage' object is not callable
如何解决此问题?geoSpark的JAR未正确注册到Spark会话。有几种方法可以解决这个问题,从有点不方便到非常无缝。例如,如果在调用spark submit时指定: -jars jar1.jar,jar2.jar,jar3.jar 然后问题就会消失,如果这是你的毒药,你也可以向pyspark提供类似的命令 如果像我一样,您不想每次启动时都这样做,并且在Jupyter中将其设置为.conf会让人厌烦,那么您可以进入$SPARK_HOME/conf/SPARK-defaults.conf并设置: 火花罐jar1.jar,jar2.jar,jar3.jar 然后在创建spark实例时加载。如果您以前没有使用过conf文件,那么它将作为spark-defaults.conf.template存在 当然,当我说jar1.jar时。。。。我真正的意思是: /jars/geo_-wrapper_2.11-0.3.0.jar、/jars/geospark-1.2.0.jar、/jars/geospark-sql_2.3-1.2.0.jar、/jars/geospark-viz_2.3-1.2.0.jar 但这取决于你从geo_pyspark软件包中获得正确的软件 如果您正在使用电子病历: 您需要将集群配置json设置为
[
{
"classification":"spark-defaults",
"properties":{
"spark.jars": "/jars/geo_wrapper_2.11-0.3.0.jar,/jars/geospark-1.2.0.jar,/jars/geospark-sql_2.3-1.2.0.jar,/jars/geospark-viz_2.3-1.2.0.jar"
},
"configurations":[]
}
]
并让您的JAR作为引导的一部分上传。您可以从Maven处执行此操作,但我只是将它们放在S3桶上:
#!/bin/bash
sudo mkdir /jars
sudo aws s3 cp s3://geospark-test-ds/bootstrap/geo_wrapper_2.11-0.3.0.jar /jars/
sudo aws s3 cp s3://geospark-test-ds/bootstrap/geospark-1.2.0.jar /jars/
sudo aws s3 cp s3://geospark-test-ds/bootstrap/geospark-sql_2.3-1.2.0.jar /jars/
sudo aws s3 cp s3://geospark-test-ds/bootstrap/geospark-viz_2.3-1.2.0.jar /jars/
如果您正在使用电子病历笔记本
您需要在笔记本顶部安装一个神奇的电池:
%%configure -f
{
"jars": [
"s3://geospark-test-ds/bootstrap/geo_wrapper_2.11-0.3.0.jar",
"s3://geospark-test-ds/bootstrap/geospark-1.2.0.jar",
"s3://geospark-test-ds/bootstrap/geospark-sql_2.3-1.2.0.jar",
"s3://geospark-test-ds/bootstrap/geospark-viz_2.3-1.2.0.jar"
]
}
我在Windows10机器上看到了SparkMeasure罐子的类似问题
self.stagemetrics =
self.sc._jvm.ch.cern.sparkmeasure.StageMetrics(self.sparksession._jsparkSession)
TypeError: 'JavaPackage' object is not callable
所以我所做的是
通过Pyspark shell转到“SPARK_HOME”,并安装所需的jar
bin/pyspark-组件ch.cern.火花测量:火花测量2.12:0.16
抓起那个罐子ch.cern.sparkmeasure_spark-measure_2.12-0.16.jar并复制到“spark_HOME”的Jars文件夹中
重新运行脚本,现在它可以正常工作,没有上述错误
非常感谢你!这里还有一个补充,如果有人将geospark作为包安装在集群上,那么在指定spark.jars时,他们也可以使用location/usr/local/lib/python3.6/site-packages/geospark/jars/2_4/,因为这是主节点和核心节点在EMR上使用的位置。我在哪里可以下载geo_wrapper.jar?已经有一段时间了,但我想我们从geo_pyspark repo上获得了它,请确保获得正确的版本:
self.stagemetrics =
self.sc._jvm.ch.cern.sparkmeasure.StageMetrics(self.sparksession._jsparkSession)
TypeError: 'JavaPackage' object is not callable