【问题标题】:Overwrite specific partitions in spark dataframe write method with Delta format使用 Delta 格式覆盖 spark 数据帧写入方法中的特定分区
【发布时间】:2022-10-05 16:18:22
【问题描述】:
使用 Parquet 格式时,可以通过以下设置覆盖特定分区,
不影响其他分区文件夹中的数据
spark.conf.set(\"spark.sql.sources.partitionOverwriteMode\",\"dynamic\")
data.toDF().write.mode(\"overwrite\").format(\"parquet\").partitionBy(\"date\", \"name\").save(\"abfss://path/to/somewhere\")
但这不适用于 Databricks 中的 Delta 格式。
让我知道如何以增量格式处理此问题
标签:
apache-spark
databricks
azure-databricks
delta-lake
【解决方案1】:
在存储帐户和 azure Databricks 之间创建挂载,它将创建增量存储位置。请遵循以下语法。
dbutils.fs.mount(
source = "wasbs://<container_name>@<Storage_Account_Name>.blob.core.windows.net/",
mount_point = "/mnt/<Mount_name>",
extra_configs = {"fs.azure.account.key.<Storage_Account_Name>.blob.core.windows.net":"<Azure_Storage_Access_key>"})
然后,将架构 df 附加到写入选项,具体取决于架构提及使用 partitionBy 。最后将数据保存在创建 delta table 的 Mount 位置。
如果您想阅读 delta 甲酸盐,只需更改 .formate("delta")
spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")
df2=df.write.option("header",True).partitionBy("DateID","MedallionID").mode("overwrite").format("parquet").save("/mnt/dem123")