Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeError:“JavaPackage”对象不可调用(spark.\u jvm)_Java_Python_Apache Spark_Java Package_Geospark - Fatal编程技术网

TypeError:“JavaPackage”对象不可调用(spark.\u jvm)

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

我正在进行设置,在安装了所有先决条件之后,我正在运行非常基本的代码示例来测试它

从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运行它,两者都给出了以下错误:

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