TypeError: 'JavaPackage' object is not callable (spark._jvm)
TypeError: 'JavaPackage' object is not callable (spark._jvm)
我正在设置 GeoSpark Python,在安装所有先决条件后,我正在 运行 最基本的代码示例来测试它。
from pyspark.sql import SparkSession
from geo_pyspark.register import GeoSparkRegistrator
spark = SparkSession.builder.\
getOrCreate()
GeoSparkRegistrator.registerAll(spark)
df = spark.sql("""SELECT st_GeomFromWKT('POINT(6.0 52.0)') as geom""")
df.show()
我用 python3 basic.py
和 spark-submit basic.py
试过 运行,都给我这个错误:
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
我正在使用 Java 8,Python 3,Apache Spark 2.4,我的 JAVA_HOME
设置正确,我是 运行 Linux薄荷 19. 我的 SPARK_HOME
也已设置:
$ printenv SPARK_HOME
/home/jessica/spark/
我该如何解决这个问题?
geoSpark 的 Jars 未正确注册到您的 Spark 会话。有几种方法可以解决这个问题,从有点不方便到非常无缝。例如,如果您在调用 spark-submit 时指定:
--jars jar1.jar,jar2.jar,jar3.jar
那么问题就会消失,如果那是你的毒药,你也可以提供与 pyspark
类似的命令。
如果你像我一样,不想每次启动时都这样做(在 Jupyter 中将其设置为 .conf()
会让人厌烦),那么你可以进入 $SPARK_HOME/conf/spark-defaults.conf
并设置:
spark-jars 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 包中获得正确的那些。
如果您使用的是 EMR:
您需要将集群配置 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 文件作为 bootstrap 的一部分上传。您可以从 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/
如果您使用的是 EMR 笔记本
你的笔记本顶部需要一个魔法电池:
%%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"
]
}
我在 Windows 10 机器
上看到 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 --packages ch.cern.sparkmeasure:spark-measure_2.12:0.16
抓取那个 jar (ch.cern.sparkmeasure_spark-measure_2.12-0.16.jar
) 并复制到 'SPARK_HOME'
的 Jars 文件夹中
重新运行脚本,现在可以正常运行,没有出现上述错误。
我正在设置 GeoSpark Python,在安装所有先决条件后,我正在 运行 最基本的代码示例来测试它。
from pyspark.sql import SparkSession
from geo_pyspark.register import GeoSparkRegistrator
spark = SparkSession.builder.\
getOrCreate()
GeoSparkRegistrator.registerAll(spark)
df = spark.sql("""SELECT st_GeomFromWKT('POINT(6.0 52.0)') as geom""")
df.show()
我用 python3 basic.py
和 spark-submit basic.py
试过 运行,都给我这个错误:
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
我正在使用 Java 8,Python 3,Apache Spark 2.4,我的 JAVA_HOME
设置正确,我是 运行 Linux薄荷 19. 我的 SPARK_HOME
也已设置:
$ printenv SPARK_HOME
/home/jessica/spark/
我该如何解决这个问题?
geoSpark 的 Jars 未正确注册到您的 Spark 会话。有几种方法可以解决这个问题,从有点不方便到非常无缝。例如,如果您在调用 spark-submit 时指定:
--jars jar1.jar,jar2.jar,jar3.jar
那么问题就会消失,如果那是你的毒药,你也可以提供与 pyspark
类似的命令。
如果你像我一样,不想每次启动时都这样做(在 Jupyter 中将其设置为 .conf()
会让人厌烦),那么你可以进入 $SPARK_HOME/conf/spark-defaults.conf
并设置:
spark-jars 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 包中获得正确的那些。
如果您使用的是 EMR: 您需要将集群配置 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 文件作为 bootstrap 的一部分上传。您可以从 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/
如果您使用的是 EMR 笔记本 你的笔记本顶部需要一个魔法电池:
%%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"
]
}
我在 Windows 10 机器
上看到 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 --packages ch.cern.sparkmeasure:spark-measure_2.12:0.16
抓取那个 jar (
的 Jars 文件夹中ch.cern.sparkmeasure_spark-measure_2.12-0.16.jar
) 并复制到 'SPARK_HOME'重新运行脚本,现在可以正常运行,没有出现上述错误。