Spark - Dataframe Writer - Дополнительный пустой файл - PullRequest
0 голосов
/ 13 января 2020

У меня странное поведение с искрой.

Я использую небольшой набор данных только с 10 строками:

+-----+--------------------+
|   id|       neighbourhood|
+-----+--------------------+
|47061|De Baarsjes - Oud...|
|50515|       Bos en Lommer|
|50570|       Bos en Lommer|
|20168|        Centrum-Oost|
|46386|De Pijp - Riviere...|
|50518|          Westerpark|
| 2818|Oostelijk Havenge...|
|52490|Oostelijk Havenge...|
|31080|                Zuid|
|43980|                Zuid|
+-----+--------------------+

После перераспределения по столбцу 'окрестности' создано 200 разделов.

Я добавил столбец чтобы определить местоположение каждой строки с помощью следующего кода:

df.select('*', spark_partition_id().alias('partition_id'))

И результат:

+-----+--------------------+------------+
|   id|       neighbourhood|partition_id|
+-----+--------------------+------------+
|47061|De Baarsjes - Oud...|          17|
|50515|       Bos en Lommer|          19|
|50570|       Bos en Lommer|          19|
|20168|        Centrum-Oost|          25|
|46386|De Pijp - Riviere...|          34|
|50518|          Westerpark|          44|
| 2818|Oostelijk Havenge...|          70|
|52490|Oostelijk Havenge...|          70|
|31080|                Zuid|         102|
|43980|                Zuid|         102|
+-----+--------------------+------------+

Пока все хорошо.

Что неправильно, когда я пишу фрейм данных:

df.write.csv('xxxxxxxxx/df_pid')

В результате получается следующее:

 - df_pid
 -------- / part-00000-.... .csv
 -------- / part-00017-.... .csv
 -------- / part-00019-.... .csv
 -------- / part-00025-.... .csv
 -------- / part-00034-.... .csv
 -------- / part-00044-.... .csv
 -------- / part-00070-.... .csv
 -------- / part-00102-.... .csv

Насколько я могу судить число в part-xxx соответствует индексу записываемого раздела. Но чего я не понимаю, так это почему часть-00000 -.....csv, когда в индексе раздела 0 нет данных?

Может кто-нибудь объяснить?

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 января 2020

При случайном перемешивании число разделов, создаваемых искрой по умолчанию, равно 200. Если вы хотите изменить поведение, вы должны установить следующее свойство:

spark.sql.shuffle.partitions

Do c ссылка.

Поскольку у вас мало данных разделы создаются без записей. При сохранении раздела без данных вы получите пустой файл.

0 голосов
/ 13 января 2020

После повторного разбиения по столбцу «соседство» было создано 200 разделов, что означает 200 файлов, но у вас есть только 10 записей, поэтому некоторые разделы будут иметь данные, а некоторые - нет. Вы можете уменьшить размер раздела или использовать coalesce для уменьшения разделов перед записью. Если вы уменьшите количество разделов до 1, то в «df_pid» будет записан только 1 файл.

...