Spark принудительно выполняет секционирование при чтении - PullRequest
0 голосов
/ 06 мая 2020
• 1000
processed_data/year=2020/month=05/day=01/hour=00/yyy.parquet
processed_data/year=2020/month=05/day=01/hour=01/yyy.parquet
...

Мне кажется, если Spark может читать набор данных таким образом, что каждый исполнитель читает все файлы в разделе hour, это минимизирует перетасовку. Есть ли способ указать шаблон чтения раздела Spark?

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Лучший подход согласно этому документу: http://tantusdata.com/spark-shuffle-case-1-partition-by-and-repartition/

df.repartition...write.partitionBy..., чтобы избежать перетасовки и повышения производительности последующего чтения.

Spark partition discovery при чтении с базовый путь тоже может помочь.

1 голос
/ 06 мая 2020

Я думаю, что лучше сохранить данные так, как вы хотите их читать, вместо того, чтобы пытаться настроить, как Spark загружает данные.

Вы можете прочитать все данные и разбить их на часов по своему усмотрению. Вероятно, вам нужно сначала создать столбец типа «год-месяц-день-час», но затем вы можете перераспределить свои данные на основе этого столбца.

df.repartition(col("year-month-day-hour")).write.format("parquet").save(path-to-file)
...