EMR 版本 > 6.9.0 上的 Apache Sedona:JavaPackage 对象不可调用

问题描述 投票:0回答:2

我正在尝试在 AWS EMR 上运行 Apache Sedona 1.5.3 for Spark 3.4。

按照说明后,我收到错误,

  File "/usr/local/lib64/python3.7/site-packages/sedona/sql/dataframe_api.py", line 156, in validated_function
    return f(*args, **kwargs)
  File "/usr/local/lib64/python3.7/site-packages/sedona/sql/st_constructors.py", line 125, in ST_GeomFromWKT
    return _call_constructor_function("ST_GeomFromWKT", args)
  File "/usr/local/lib64/python3.7/site-packages/sedona/sql/dataframe_api.py", line 65, in call_sedona_function
    jc = jfunc(*args)
TypeError: 'JavaPackage' object is not callable

一般表示jar包找不到或无法使用,或者是版本错误。

上面链接的说明针对 Spark 3.3.0 的 EMR 6.9.0 进行了测试;我正在尝试 6.14,试图达到 Spark 3.4。 但是,说明确实指出:

如果您使用的是 Spark 3.4+ 和 Scala 2.12,请使用

sedona-spark-shaded-3.4_2.12
。请关注Spark版本postfix和Scala版本postfix。

所以看来 Spark 3.4 应该没问题。 (这里没有回复,我会尝试恢复到3.3.0。)

在 Spark 配置中,我指定了,

"spark.yarn.dist.jars": "/jars/sedona-spark-shaded-3.4_2.12-1.5.3.jar,/jars/geotools-wrapper-1.5.3-28.2.jar",
"spark.serializer": "org.apache.spark.serializer.KryoSerializer",
"spark.kryo.registrator": "org.apache.sedona.core.serde.SedonaKryoRegistrator",
"spark.sql.extensions": "org.apache.sedona.viz.sql.SedonaVizExtensions,org.apache.sedona.sql.SedonaSqlExtensions"

我认为这是正确的版本。 我可能会感到困惑,因为 Spark 3.3.0 的说明使用

sedona-spark-shaded-3.0_2.12-1.5.3.jar
。 也许我不明白3.0/3.4指的是什么。 但根据塞多纳开发人员的this回答,我认为我的设置是正确的。

我的 bootstrap 下载 jar 并 pip 安装定向包。 最后,我

ls -lh
确认他们在那里。 我还将它们写入用户目录,以使用 hadoop 而不是 root 所有者来尝试它们(见下文):

-rw-r--r-- 1 root root 29M May 10 15:49 /jars/geotools-wrapper-1.5.3-28.2.jar
-rw-r--r-- 1 root root 21M May 10 15:49 /jars/sedona-spark-shaded-3.4_2.12-1.5.3.jar
-rw-rw-r-- 1 hadoop hadoop 29M May 10 15:49 /home/hadoop/custom/geotools-wrapper-1.5.3-28.2.jar
-rw-rw-r-- 1 hadoop hadoop 21M May 10 15:49 /home/hadoop/custom/sedona-spark-shaded-3.4_2.12-1.5.3.jar

在 pyspark 脚本中,我记录了

sedona.version
以确认它是 1.5.3,并记录了
spark.sparkContext._conf.getAll()
以确认它包含

('spark.yarn.dist.jars', 'file:/jars/sedona-spark-shaded-3.4_2.12-1.5.3.jar,file:/jars/geotools-wrapper-1.5.3-28.2.jar'

我尝试过的其他东西。

由于

/jars
是为root用户而不是
hadoop
编写的,我还将jar加载到
/home/hadoop/
中的本地目录。在 Sedona 的早期版本中,我使用
spark.driver.extraClassPath
spark.executor.extraClassPath
来指定下载的 jar。 最后,我尝试只使用
--jars
,尽管这篇文章

EC2 上的 EMR 会忽略 Spark.jars 属性,因为它使用 Yarn 来部署 jar。参见

SEDONA-183

这些方法都不起作用:它们都给出了相同的

'JavaPackage' object is not callable

错误。

半相关测试。

本地测试

packages = [ "org.apache.sedona:sedona-spark-3.4_2.12:1.5.3", "org.datasyslab:geotools-wrapper:1.5.3-28.2", ] conf = ( SedonaContext.builder() .config("spark.jars.packages", ",".join(packages)) [...] .config( "spark.jars.repositories", "https://artifacts.unidata.ucar.edu/repository/unidata-all", ) .getOrCreate() ) spark = SedonaContext.create(conf)
一切运行良好。  请注意未加阴影的罐子,在这种情况下,如

directed

如果您在 IDE 或本地 Jupyter 笔记本中运行 Sedona,请使用

unshaded

 jar。

此外,在 EMR 版本中,我没有创建 Spark,因此我只能假设 SedonaContext“有效”。 我删除了

SedonaRegistrator.registerAll(spark)

 调用,该调用现已弃用,并且在上面的本地版本中不需要。

apache-spark pyspark amazon-emr apache-sedona
2个回答
2
投票
我相信您需要更换

SedonaRegistrator

,而不是简单地删除它。  这样你就可以跑了

sedona_conf = SedonaContext.builder().getOrCreate() spark = SedonaContext.create(sedona_conf) test=spark.sql("SELECT ST_Point(double(1.2345), 2.3456)") test.show()
在您的 EMR 工作中,就像在本地一样。


0
投票
嘿,这是官方安装指南,请检查:

https://sedona.apache.org/latest-snapshot/setup/emr/

© www.soinside.com 2019 - 2024. All rights reserved.