首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError:“JavaPackage”对象不可调用(spark._jvm)

TypeError:“JavaPackage”对象不可调用(spark._jvm)
EN

Stack Overflow用户
提问于 2019-10-29 13:17:45
回答 2查看 20.2K关注 0票数 9

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

代码语言:javascript
运行
复制
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.pyspark-submit basic.py运行它,两者都给出了以下错误:

代码语言:javascript
运行
复制
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

我使用的是Java8、Python3、ApacheSpark2.4,我的JAVA_HOME设置正确,我运行的是Linux 19。我的SPARK_HOME也被设置为:

代码语言:javascript
运行
复制
$ printenv SPARK_HOME
/home/jessica/spark/

我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-03 13:22:15

geoSpark的Jars没有正确地注册到Spark会话中。有几种方法可以解决这一问题,从一点不方便到相当无缝。例如,如果在调用spark submit时指定:

--jars jar1.jar,jar2.jar,jar3.jar

然后问题就会消失,如果这是您的毒药,您还可以提供一个类似于pyspark的命令。

如果像我一样,在每次启动时都不想这样做(并将其设置为木星中的.conf()将变得令人厌烦),那么您可以进入$SPARK_HOME/conf/spark-defaults.conf并设置如下:

spark-jars jar1.jar,jar2.jar,jar3.jar

当您创建一个星火实例时,它将被加载。如果您还没有使用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设置为

代码语言:javascript
运行
复制
[
  {
    "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":[]
  }
]

并让你的罐子上传作为你的引导的一部分。您可以从Maven中这样做,但我只是把它们扔到了一个S3桶上:

代码语言:javascript
运行
复制
#!/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/

如果您使用的是电子病历笔记本,您需要在笔记本的顶部安装一个神奇的单元:

代码语言:javascript
运行
复制
%%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"
    ]
}
票数 7
EN

Stack Overflow用户

发布于 2020-08-26 00:08:20

我在Windows10机器上看到了类似的SparkMeasure jars问题

代码语言:javascript
运行
复制
self.stagemetrics =
self.sc._jvm.ch.cern.sparkmeasure.StageMetrics(self.sparksession._jsparkSession)
TypeError: 'JavaPackage' object is not callable

所以我做的是

  1. 转到“SPARK_HOME”,并安装了所需的jar 垃圾箱/火花放电--包装ch.cern.flk测量:火花-测量_2.12:0.16
  2. 抓起那个罐子( ch.cern.sparkmeasure_spark-measure_2.12-0.16.jar ),复制到SPARK_HOME的jar文件夹中
  3. 重新运行脚本,现在它没有出现上述错误。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58608226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档