2017-02-21 20 views
1

Я только начинаю с Pyspark и хочу сохранить файл как csv вместо текстового файла. Я попытался с помощью пара ответов, которые я нашел на переполнение стека, такие какЗапись RDD в csv с разделенными столбцами

def toCSVLine(data): 
    return ','.join(str(d) for d in data) 

, а затем

rdd = lines.map(toCSVLine) 
rdd.saveAsTextFile("file.csv") 

Он работает в том, что я могу открыть его в Excel, однако вся информация введена в колонке А в электронной таблице. Я хотел бы иметь возможность помещать каждый столбец в rdd (пример будет («ID», «рейтинг») в отдельный столбец в excel, поэтому идентификатор будет в столбце A, а рейтинг будет в столбце B. Будет ли способ сделать это?

ответ

0

Одним из вариантов является преобразование RDD в dataframe, а затем сохранение в виде CSV.

from pyspark import SparkContext 
df = sqlContext.createDataFrame(rdd, ['count', 'word']) 
# Write CSV (I have HDFS storage) 
df.coalesce(1).write.format('com.databricks.spark.csv').options(header='true').save('file:///home/username/csv_out') 

Пожалуйста, смотрите этот пост я только что сделал: How to write the resulting RDD to a csv file in Spark python

+0

Это действительно сработало, но есть ли способ заставить его игнорировать запятые внутри кавычек? Он разделил строку текста, которую мне нужно объединить в несколько столбцов, потому что в ней есть некоторые запятые. – tclaw46

+0

Возможно, вы можете использовать другой разделитель с .option ("delimiter", "|") и использовать этот разделитель при открытии Excel – Insilico

+0

Хорошо, мне удалось заставить его работать с этим кодом. Спасибо за помощь. – tclaw46

1

в первенствует вы расколоть файл на «»?

в Excel перейдите на вкладку данных и выберите текст на колонки под инструменты данных, затем выберите разделителями и нажмите далее. Затем выберите запятой в качестве разделителя и нажмите «Готово».

Редактировать

Как правило, было бы лучше всего создать csv с другим символом разделителя, чем запятой, если запятые будут в ваших данных. За ваш комментарий, если вы создаете csv, просто используйте другой разделитель (например, «;», «|», «^» или вкладки). Другой вариант, который я предпочитаю меньше, чтобы обернуть поле под вопросом в «» как так:

field0,field1,"field,2",field3 

Excel должен оставить то, что в один цитатах и ​​только расколе на запятые вне кавычек. Но опять же это не мое предпочтительное решение.

+0

Я попробовать этот метод, но он разделен на одну из колонн, где была строка текста с несколькими запятыми в нем в несколько колонок. Есть ли способ использовать этот метод, игнорируя запятые внутри кавычек? – tclaw46

1

Если вы используете Spark> = 2.0 и предположим, что ваш RDD имеет табличный формат (который он должен, если вы хотите сохранить его как CSV), одним из способов может быть создание Dataframe из RDD, а затем использование DataFrameWriter для экспорта в CSV.

from pyspark.sql import SparkSession 

spark = SparkSession(sc).getOrCreate() 

df = spark.createDataframe(rdd) 

df.write.csv("/path/to/file.csv", sep=',', header=True) 

Посмотрите the pyspark.sql docs дополнительных опций и дополнительной информации.

+0

Есть ли способ использовать запятую в качестве разделителя при игнорировании запятых внутри кавычек? – tclaw46

+0

Запятые внутри строк должны быть точными, так как строки должны автоматически указываться. Вы пробовали опции 'sep',' quote', 'escape' и т. Д.? – karlson

 Смежные вопросы

  • Нет связанных вопросов^_^