控制目标实木复合地板文件的数量

时间:2018-11-20 13:46:16

标签: scala apache-spark apache-spark-sql parquet

我有〜250个文件夹。每个文件夹一天。 每个文件夹包含24个实木复合地板文件。 我需要全部阅读它们,在它们上运行一个函数,然后在函数更改后将它们写入。

写作时,我正在这样做:

df
  .repartition('date)
  .write
  .partitionBy("date")
  .mode(SaveMode.Overwrite)
  .parquet(outputPath)

但这会在每个日期“丢失”原始分割成24个部分,并在每个日期写入一个文件。是否可以将每天分成n个部分?

1 个答案:

答案 0 :(得分:-1)

您可以在执行repartition-scaladoc

时指定目标分区的数量。
df
  .repartition(numPartitions = 24, 'date)
  .write
  .partitionBy("date")
  .mode(SaveMode.Overwrite)
  .parquet(outputPath)

编辑

我刚刚意识到numPartitions是所产生的分区总数。因此,您可以尝试将其传递给您的天数乘以每个文件所需的拆分次数,例如 eg numPartitions = 24 * 250-但是,不能保证所有的日子都精确地有24个拆分,尤其是如果每天的数据量完全不同。