Size: a a a

2020 July 22

Sa

Salam andra in Moscow Spark
Alexander Rodionov 🦕🥦🥬🥒🍏🌵🦚🌲🌳🌴🌿☘️🍀🦖🦎🐍🐊🐸🍃🦠🌱🐢🐉🌾
добрый день
хочу записать спарком датафрейм чтобы было 300 партиций

(
   spark
   .table('db.table1')
   .repartition(300)
   .write
   .saveAsTable('db.table2', mode='overwrite')
)
spark.table('db.table2').rdd.getNumPartitions() # 37


а он сохраняет 37
как фиксить?
partitionBy после write?
источник

A🦕

Alexander Rodionov 🦕... in Moscow Spark
Salam andra
partitionBy после write?
в partitionBy нужно указывать колонку/несколько по которым партицировать - а у меня нет уникальной колонки) мне просто равномерно разбить нужно
ну можно наверное в таких случаях добавить какой нибудь zipWithIndex`/`zipWithUniqueId
источник

Sa

Salam andra in Moscow Spark
Можно добавить колонку , в ней сгенерить рандомное число и взять остаток от деления
источник

PK

Pavel Klemenkov in Moscow Spark
Salam andra
partitionBy после write?
Погоди, мы же уже выяснили, что записывается столько файлов, сколько надо. При чтении уже другой партишенер будет
источник

Sa

Salam andra in Moscow Spark
Pavel Klemenkov
Погоди, мы же уже выяснили, что записывается столько файлов, сколько надо. При чтении уже другой партишенер будет
Если правильно понимаю, то записываются все 300 файлов в 1 партицию или это не так @tandav
источник

Sa

Salam andra in Moscow Spark
Вру, 37 или не понимаю что происходит
источник

PK

Pavel Klemenkov in Moscow Spark
Salam andra
Если правильно понимаю, то записываются все 300 файлов в 1 партицию или это не так @tandav
Так, давай теперь выясним, что ты имеешь в виду под партицией?
источник

Sa

Salam andra in Moscow Spark
Pavel Klemenkov
Так, давай теперь выясним, что ты имеешь в виду под партицией?
Папка на hdfs
источник

Sa

Salam andra in Moscow Spark
@tandav  А сколько папок(партиций) создаётся на hdfs при использовании repartition?
источник

A🦕

Alexander Rodionov 🦕... in Moscow Spark
проверил число уникальных названий - 300
все в 1 папке table

-rw-r-----
нету d в начале значит это файлы-партиции а не папки

upd: обновил файл
источник

PK

Pavel Klemenkov in Moscow Spark
Salam andra
Папка на hdfs
Ок, но проблема-то не в этом. Проблема в том, что записываются честные 300 файликов, а считываются эти файлики в 37 партиций нового датафрйма.
источник

PK

Pavel Klemenkov in Moscow Spark
Партиции хайва здесь вообще не при делах
источник

ЕГ

Евгений Глотов... in Moscow Spark
Вот параметр, который заставляет спарк группировать записи из разных файлов при чтении в один инпут сплит, в один таск
источник

Sa

Salam andra in Moscow Spark
Pavel Klemenkov
Ок, но проблема-то не в этом. Проблема в том, что записываются честные 300 файликов, а считываются эти файлики в 37 партиций нового датафрйма.
А мы ожидаем что под каждый файл будет 1 партишнер?
источник

A🦕

Alexander Rodionov 🦕... in Moscow Spark
ну по идее вот тут описана причина
но проверить к сожалению сейчас не могу
там написано из юпитера нельзя
а в конфиги сейчас не смогу лезть

checkpoint если что помог после чтение + repartition
источник

PK

Pavel Klemenkov in Moscow Spark
Salam andra
А мы ожидаем что под каждый файл будет 1 партишнер?
Партишенер - это объект, который нарезает записи по партициям спарка. Он один на каждый датафрейм
источник

А

Алексей in Moscow Spark
есть еще такой параметр spark.sql.files.maxPartitionBytes
источник

N

Nikolay in Moscow Spark
Он скорее не на датафэйм, а на шафл
источник

N

Nikolay in Moscow Spark
И партишенер не режет. У него нет функции нарезать
источник

PK

Pavel Klemenkov in Moscow Spark
Nikolay
И партишенер не режет. У него нет функции нарезать
Да, неверно выразился. Мапит row в номер партиции
источник