Перед записью в HDFS
вы можете repartition(1)
, чтобы вы создавали 1 файл за одно выполнение.
df.repartition(1).write.parquet("<directory>")
Merging files:
Using Hive:
Если у вас уже есть таблица кустов поверх каталога user_id/employe_db/market_table/
, запустите вставку перезаписи, выбрав ту же таблицу.
spark.sql("insert overwrite table <db>.<tab_market> select * from <db>.<tab_market>")
- чтобы создать только один файл, используйте порядок
spark.sql("insert overwrite table <db>.<tab_market> select * from <db>.<tab_market> order by <column>")
Вы также можете запускать операторы вставки, как и в Hive.
(или)
Using Spark:
В качестве процесса загрузки сообщения вы можете снова читать паркетные файлы из каталога, затем снова выполнить разделение и записать в каталог.
df_src=spark.read.parquet("<directory>")
df_src.repartition(<number>).write.mode("overwrite").parquet("<directory>")
NOTE
- перезапись сначала удаляет каталог; в случае сбоя задания в промежутке мы можем столкнуться с потерей данных.
- Лучше всего сделать резервную копию данных в каталоге tmp, а затем перезаписать только