使用 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.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。
我已经成功使用 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)
我正在尝试使用 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.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。
我已经成功使用 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)