类型错误:'JavaPackage'对象不可调用 - jvm.io.delta.tables.DeltaTable.isDeltaTable

0

【以下的问题经过翻译处理】 你好,

我终于使用EMR无服务器应用程序解决了大部分问题,但根据日志显示,似乎在以下代码行中存在特定问题:

if (DeltaTable.isDeltaTable(spark, targetDeltaTableURI)):

日志中的错误消息如下所示,你可以在日志的顶部看到数据帧已创建,但在检查Delta表是否存在时出现错误。

|135123 |1670038 |13558561-12 |2018-03-19 |36.01 |2023-03-22 16:51:05.35525| |668217 |1361372 |13563506-22 |2018-03-22 |27.19 |2023-03-22 16:51:05.35525| +---------+-----------+------------+-------------------+---------+-------------------------+ only showing top 20 rows

Traceback (most recent call last): File "/tmp/spark-9a694201-d321-475f-9855-7d4ada8da0e5/main.py", line 337, in <module> main() File "/tmp/spark-9a694201-d321-475f-9855-7d4ada8da0e5/main.py", line 135, in main processRawData(spark, s3BucketName, objectName, schema, 'bmi') File "/tmp/spark-9a694201-d321-475f-9855-7d4ada8da0e5/main.py", line 317, in processRawData if (DeltaTable.isDeltaTable(spark, targetDeltaTableURI)): File "/home/hadoop/environment/lib64/python3.7/site-packages/delta/tables.py", line 562, in isDeltaTable return jvm.io.delta.tables.DeltaTable.isDeltaTable(jsparkSession, identifier) TypeError: 'JavaPackage' object is not callable

以下是我的提交命令:

aws emr-serverless start-job-run --profile 000000_SD
--name nw_raw_data1
--application-id $APPLICATION_ID
--execution-role-arn $JOB_ROLE_ARN
--job-driver '{ "sparkSubmit": { "entryPoint": "s3://'${S3_BUCKET}'/scripts/main.py", "sparkSubmitParameters": "--jars s3://'${S3_BUCKET}'/scripts/pyspark_nw.tar.gz --py-files s3://'${S3_BUCKET}'/scripts/variables.ini --conf spark.driver.cores=1 --conf spark.driver.memory=2g --conf spark.executor.cores=4 --conf spark.executor.memory=4g --conf spark.executor.instances=2 --conf spark.archives=s3://'${S3_BUCKET}'/scripts/pyspark_nw.tar.gz#environment --conf spark.emr-serverless.driverEnv.PYSPARK_DRIVER_PYTHON=./environment/bin/python --conf spark.emr-serverless.driverEnv.PYSPARK_PYTHON=./environment/bin/python --conf spark.emr-serverless.executorEnv.PYSPARK_PYTHON=./environment/bin/python" } }'
--configuration-overrides '{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://'${S3_BUCKET}'/logs/" } } }'

以下是用于构建虚拟环境的pip软件包:

boto3==1.26.74 botocore==1.29.74 delta-spark fhir.resources==6.5.0 pyspark==3.3.0

谢谢你的帮助。

profile picture
EXPERTE
gefragt vor 6 Monaten36 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 你好,我认为最后一步的问题在于获取正确的 --jars 设置。你提供的好像是打好包的 pyspark 环境吧,而这不是实际的 delta-core jar 文件。

根据你运行的 EMR 版本,你有几个办法可以尝试:

对于 EMR 6.9.0,Delta Lake 2.1.0 已包含在 EMR Serverless 镜像中。如果你使用相同的版本,你可以在 sparkSubmitParameters 参数中将 spark.jars=/usr/share/aws/delta/lib/delta-core.jar,/usr/share/aws/delta/lib/delta-storage.jar 作为 --conf 项进行指定。你可能还需要在那里添加其他项(如 spark.sql.extensions),如快速入门<https://docs.delta.io/latest/quick-start.html>中所述。
在 EMR 6.9.0 之前,你必须使用 --packages 标志来指定你的 Java 依赖项,或将 delta-core jar 上传到 S3。你可以在 EMR Serverless 文档<https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/using-delta-lake.html> 中找到更多关于这种方法的详细信息。
如果你使用的 Delta Lake 版本与安装在 EMR Serverless 上的版本不匹配,你也可以使用 --packages 参数或按上述方式上传 delta-core jar。--packages 标志将成为 sparkSubmitParameters 的一部分:--packages io.delta:delta-core_2.12:2.2.0。

希望对你有帮助。

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen

Relevanter Inhalt