[英]getting InvocationTargetException when running my glue job
我试图理解为什么会出现以下错误。
“Py4JJavaError:调用 None.org.apache.spark.sql.SparkSession 时发生错误。java.lang.reflect.InvocationTargetException”
基本上,我正在尝试使用 delta 模块在胶水作业中对我的表执行“upsert”方法。
当我运行以下代码时,出现上述错误。
from delta import *
from pyspark.sql.session import SparkSession
spark = SparkSession \
.builder \
.config("spark.jars.packages", "io.delta:delta-core_2.11:0.5.0")\
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
.config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
.getOrCreate()```
This is the only piece I run and get the error. Do you have any ideas why this is happening?
很可能,您使用了错误的版本,可能是 Glue3.0。 有一些解决方法可以将 Delta 与 Glue2.0 一起使用,但是当您尝试将它们与 Glue3.0 一起使用时,这些方法可能会产生此类错误。 此外,在内部设置 spark 会话配置对某些参数不起作用,这取决于我猜的版本。
不过不用担心,AWS 发布了 Glue 第 4 版,这里是官方公告。
这是使用 Delta with Glue 的官方指南,下面我将说明使其工作的要点。
第一个也是最棘手的部分是提供 delta 的配置。 您现在可以像在 Glue4.0 中那样做。 在旧版本中,您通过 Glue 的作业参数在 conf 参数中发送 conf 参数来完成此操作:)
--conf = spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog
您必须将作业参数中的--datalake-format
参数设置为delta
。
之后,确保您选择了 Glue4.0。 此外,请确保在脚本中或使用爬虫处理符号链接清单文件。
如果你想要更多的灵活性,你也可以选择使用 AWS 的 EMR 服务, 这里有一个使用 Delta 的演练。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.