Spark - Уменьшить количество разделов до количества прочитанных папок. - PullRequest
0 голосов
/ 02 февраля 2020

Использование потоковой передачи искры (каждые 5 минут) Я храню данные как паркет в HDFS.

/ data / yyyy-MM-dd / *. Parquet

Например: / data / 2020-02-02 / * parquet

Размер каждого файла паркета указывается только в килобайтах

Каждая папка может содержать до 288 файлов паркета (не более).

Обычно мы читаем данные за последние 24 часа, последние 7 дней, последний месяц и т. д.

При чтении данных с помощью spark и я проверил количество разделов. Допустим, я проверяю данные за последний месяц, и в каждой папке у меня 288 файлов, и создается 288 разделов.

Когда я пытаюсь перераспределить данные до 30, они уменьшаются до 180.

Можно ли как-нибудь создать один раздел для одной папки.

Например: когда я читаю данные за последние 30 дней. Есть ли способ, которым я могу прочитать данные с 30 разделами. Если 7 дней 7 разделов.

1 Ответ

0 голосов
/ 02 февраля 2020

Мое предпочтительное решение - использовать функцию partitionBy:

import org.apache.spark.sql.functions._
val df = spark.range(1,100).withColumn("myPartition", col("id")%10)
// saving with one file per partition
df.repartition(1, $"myPartition")
  .write
  .mode("append")
  .partitionBy("myPartition")
  .parquet("output/data")

, это должно создать

# hadoop fs -ls output/data
output/data/myPartition=0
output/data/myPartition=1
...
output/data/myPartition=9

с одним файлом паркета каждый.

...