使用aws胶水作业在s3上读/写delta湖表

olhwl3o2  于 2021-05-27  发布在  Spark
关注(0)|答案(3)|浏览(440)

我尝试使用aws glue jobs访问s3底层的delta lake表,但是得到的错误是“module delta not defined”

from pyspark.sql import SparkSession
from pyspark.conf import SparkConf
spark = SparkSession.builder.appName("MyApp").config("spark.jars.packages", "io.delta:delta-core_2.11:0.6.0").getOrCreate()
from delta.tables import *

data = spark.range(0, 5)
data.write.format("delta").save("S3://databricksblaze/data")

在粘合作业的依赖jar中也添加了必要的jar(delta-core_2.11-0.6.0.jar)。有人能帮我吗?谢谢

ldfqzlk8

ldfqzlk81#

您需要传递其他配置属性

--conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
7rtdyuoh

7rtdyuoh2#

设置 spark.jars.packagesSparkSession.builder.config 不起作用。 spark.jars.packages 由处理 org.apache.spark.deploy.SparkSubmitArguments/SparkSubmit . 所以它必须作为 spark-submit 或者 pyspark 脚本。什么时候 SparkSession.builder.config 被称为, SparkSubmit 已经完成了任务。所以呢 spark.jars.packages 目前没有行动。看到了吗https://issues.apache.org/jira/browse/spark-21752 更多细节。

krcsximq

krcsximq3#

我已经成功地使用胶水+德尔塔拉克。我将deltalake依赖项添加到粘合作业的“依赖jars路径”部分。这里是它们的列表(我使用的是deltalake0.6.1):
com.ibm.icu\icu4j-58.2.jar
io.delta\u delta-core\u 2.11-0.6.1.jar
org.abego.treelayout\u org.abego.treelayout.core-1.0.3.jar
org.antlr\u antlr4-4.7.jar
org.antlr\u antlr4-runtime-4.7.jar
org.antlr\u antlr-runtime-3.5.2.jar
org.antlr\u st4-4.0.8.jar文件
org.glassfish\u javax.json-1.0.4.jar
然后在粘合作业中,可以使用以下代码:

from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext()
sc.addPyFile("io.delta_delta-core_2.11-0.6.1.jar")

from delta.tables import *

glueContext = GlueContext(sc)
spark = glueContext.spark_session

delta_path = "s3a://your_bucket/folder"
data = spark.range(0, 5)
data.write.format("delta").mode("overwrite").save(delta_path)

deltaTable = DeltaTable.forPath(spark, delta_path)

相关问题