如何在Azure databricks中使用replaceWhere子句选择多个日期分区

问题描述 投票:0回答:1

我尝试仅使用 replaceWhere 覆盖选定的

partitions
。不幸的是,分区模式正在使用
Year
Month
Day

我已经尝试过以下代码,但是

overwrite
所有内容,而不仅仅是选定的日期。

并且它不会抛出任何错误消息。

DateFrom = df_raw_mango.agg({"file_date": "min"}).collect()[0][0]
DateTo = df_raw_mango.agg({"file_date": "max"}).collect()[0][0]

condition = f"concat(col('Year'), col('Month'), col('Day')) >= '{DateFrom}' AND concat(col('Year'), col('Month'), col('Day')) <= '{DateTo}'"


df_raw_mango.coalesce(1).write.format('csv') \
                        .option("replaceWhere", condition).mode('overwrite') \
                        .option('header','true') \
                        .option('delimiter',',') \
                        .partitionBy(['Year','Month','Day','file_name']) \
                        .save(f'/mnt/Fruits/Mango/Green')

我什至尝试放置分区

file_date
并这样做,但没有成功:

condition = f"file_date >= '{DateFrom}' AND file_date <= '{DateTo}'"
.coalesce(1).write.format('csv') \
                    .partitionBy(['Year','Month','Day','file_name','file_date']) \
                    .option("replaceWhere", condition).mode('overwrite') \
                    .option('header','true') \
                    .option('delimiter',',') \
                    .save(f'/mnt/Fruits/Mango/Green/')

我使用的是 databricks 10.4。文档显示

replaceWhere
适用于 >9.1 https://docs.databricks.com/en/delta/selective-overwrite.html#任意-selective-overwrite-with-replacewhere&language-python。但不适合我。

相反,我必须删除分区

append

csv pyspark azure-databricks partition
1个回答
0
投票

没关系,这似乎是一个数据湖功能。不适用于 CSV。我忽略了文档。

© www.soinside.com 2019 - 2024. All rights reserved.