Spark S3 инкрементальной нагрузки паркет перезаписать конкретные разделы - PullRequest
0 голосов
/ 23 октября 2018

Мои данные паркетные и разделены на 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)
...