Мои данные паркетные и разделены на S3.По сути, это дополнительная нагрузка, но с S3.У меня есть два набора данных, один текущий и другой измененные данные.Я могу отфильтровать нужные мне разделы с помощью фильтра по датам в df
, присоединиться к df2
и выполнить «upsert».
Теперь я хочу записать обратно в корзину S3 source2
, но перезаписать только те разделы, в которых произошли изменения.Если я использую .mode('overwrite')
, он удаляет все, а затем пишет;и я не хочу добавлять, я хочу перезаписать / «вставить» измененные данные.
Я работаю с Spark v2.2, мне сообщили, что эта функция была добавлена в 2.3, но это должно бытьпроблема, у других были обходные пути для <2.3. </p>
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)