Запись 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 ответ:
Все авторы фреймов данных 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