Как избежать чтения старых файлов из S3 при добавлении новых данных?

Раз в 2 часа запускается работа spark для преобразования некоторых файлов tgz в паркет. Задание добавляет новые данные в существующий паркет в s3:

df.write.mode("append").partitionBy("id","day").parquet("s3://myBucket/foo.parquet")

В выводе с помощью spark-submit я вижу, что значительное время затрачивается на чтение старых файлов паркета, например:

16/11/27 14:06:15 ИНФОРМАЦИЯ S3NativeFileSystem: Открытие 's3: //myBucket/foo.parquet/id=123/day=2016-11-26/part-r-00003-b20752e9-5d70-43f5-b8b4 -50b5b4d0c7da.snappy.parquet 'для чтения

16/11/27 14:06:15 ИНФОРМАЦИЯ S3NativeFileSystem: Поток для ключа 'foo.parquet / id = 123 / день = 2016-11-26 / part-r-00003-e80419de-7019-4859-bbe7-dcd392f6fcd3.snappy .parquet 'ищет позицию' 149195444 '

Похоже, что эта операция занимает менее 1 секунды на файл, но количество файлов увеличивается со временем (каждое добавление добавляет новые файлы), что заставляет меня думать, что мой код не сможет масштабироваться.

Любые идеи, как избежать чтения старых файлов паркета из s3, если мне просто нужно добавить новые данные?

Я использую EMR 4.8.2 и DirectParquetOutputCommitter:

sc._jsc.hadoopConfiguration().set('spark.sql.parquet.output.committer.class', 'org.apache.spark.sql.parquet.DirectParquetOutputCommitter')

Ответы на вопрос(1)

Ваш ответ на вопрос