我的数据是实木复合地板,并在S3中进行了分区。这实际上是一个增量负载,但使用S3。我有两个数据集,一个是最新数据,另一个是已更改数据。我可以根据df
中的日期使用过滤器过滤所需的分区,然后加入df2
,然后执行“ upsert”。
现在,我想写回S3 source2
存储桶,但只覆盖已更改的分区。如果我使用.mode('overwrite')
,它将删除所有内容,然后写入;而且我不想追加,我想覆盖/“更新”更改后的数据。
我正在使用Spark v2.2,得知此功能是在2.3中添加的,但是这应该是其他人对<2.3有解决方法的问题。
source1 = "s3://bucket/changed_data"
source2 = "s3://bucket/current_data"
/date=2018-01-01/something.parquet
/date=2018-01-02/something.parquet
...
df = spark.read.parquet(source1)
# get dates for filter
df2 = spark.read.parquet(source2).filter("where date = '2018-01-01")
df3 = # join df and df2, do some stuff, get latest record...
df3.write.parquet(source2)