Запись sparkdataframe в файл. csv в S3 и выбор имени в pyspark


У меня есть фрейм данных, и я собираюсь написать его a .csv-файл в S3 я использую следующий код:

df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly",mode='overwrite',header=True)

Он ставит a .csv-файл в папке product_profit_weekly, на данный момент .csv-файл имеет имя weired в S3 , можно ли выбрать имя файла, когда я собираюсь его записать?

1 3

1 ответ:

Все авторы фреймов данных spark (df.писать.___ ) не записывайте в один файл, а записывайте по одному фрагменту на каждый раздел. Я думаю, что вы получите каталог под названием

df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly

И один файл внутри называется

part-00000

В этом случае вы делаете что-то, что может быть довольно неэффективным и не очень "спарки" - вы объединяете все разделы фрейма данных в один, что означает, что ваша задача фактически не выполняется параллельно!

Вот другая модель. Чтобы воспользоваться всеми преимуществами Искра распараллеливания, что означает не сливаться, а писать параллельно в какой-то каталог.

Если у вас есть 100 разделов, вы получите:

part-00000
part-00001
...
part-00099

Если вам нужно все в одном плоском файле, напишите небольшую функцию, чтобы объединить его постфактум. Вы можете сделать это либо в scala, либо в bash с помощью:

cat ${dir}.part-* > $flatFilePath