使用 AWS Glue 作业在 S3 上读取/写入增量湖表

Read /Write delta lake tables on S3 using AWS Glue jobs

我正在尝试使用 AWS 胶水作业访问 S3 上的 Delta 湖表,但收到错误消息“未定义模块增量”

 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 )。 谁可以帮我这个事 谢谢

您需要传递额外的配置属性

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

SparkSession.builder.config 中设置 spark.jars.packages 无效。 spark.jars.packagesorg.apache.spark.deploy.SparkSubmitArguments/SparkSubmit 处理。因此它必须作为 spark-submitpyspark 脚本的参数传递。当 SparkSession.builder.config 被调用时,SparkSubmit 就完成了它的工作。所以 spark.jars.packages 目前是空操作。有关详细信息,请参阅 https://issues.apache.org/jira/browse/SPARK-21752

我已经成功使用 Glue + Deltalake。我将 Deltalake 依赖项添加到 Glue 作业的“依赖 jars 路径”部分。 这里有它们的列表(我使用的是 Deltalake 0.6.1):

  • com.ibm.icu_icu4j-58.2.jar
  • io.delta_delta-core_2.11-0.6.1.jar
  • org.abego.treelayout_org.abego.treelayout.core-1.0.3.jar
  • org.antlr_antlr4-4.7.jar
  • org.antlr_antlr4-runtime-4.7.jar
  • org.antlr_antlr-runtime-3.5.2.jar
  • org.antlr_ST4-4.0.8.jar
  • org.glassfish_javax.json-1.0.4.jar

然后在你的 Glue 作业中你可以使用下面的代码:

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)