3

У меня есть dataframe и а я собираюсь написать его файл в .CSV в S3 я использую следующий код:Дать sparkdataframe к CSV-файла в S3 и выберите имя в pyspark

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

он помещает файл .csv в папку product_profit_weekly, на данный момент .csv-файл имеет внятое имя в S3, возможно ли выбрать имя файла, когда я его напишу?

ответ

3

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

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

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

part-00000 

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

Другая модель. Чтобы воспользоваться преимуществами всей распараллеливания искр, что означает, что НЕ СКРЫВАЙТЕСЬ и пишите параллельно какой-либо директории.

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

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

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

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

Хорошо, но что, если у меня есть один файл, и я хочу, чтобы определить имя для него, например: report.csv, а затем записать его? – sanaz

+0

@ zero323 Я был бы признателен за вашу помощь – sanaz

+0

Если вы действительно заинтересованы в одном файле, вы можете сначала сделать что-то вроде «собрать» фреймворк данных и использовать стандартные java-файлы. Они будут создавать плоский файл, где бы вы ни хотели - искровые параллельные авторы не выглядят так, как вы хотите. – Tim