2016-04-29 4 views
1

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

123 || food || fruit 
123 || food || fruit || orange 
123 || food || fruit || apple 

Я хочу создать CSV-файл с одного столбца и различные значения строки как:

orange 
apple 

я попытался, используя следующий код:

val data = sc.textFile("fruits.csv") 
val rows = data.map(_.split("||")) 
val rddnew = rows.flatMap(arr => { 
val text = arr(0) 
val words = text.split("||") 
words.map(word => (word, text)) 
}) 

Но этот код не дает мне правильный результат по мере необходимости.
Может ли кто-нибудь помочь мне в этом?

ответ

2

вам нужно разделить с для специальных символов, так как разделение происходит регулярное выражение

.split("\\|\\|") 

преобразования в формат CSV является сложным, поскольку строки данных может потенциально содержать ваш разделитель (в кавычках), новой строки или другой parse- чувствительные символы, поэтому я бы рекомендовал использовать spark-csv

val df = sqlContext.read 
    .format("com.databricks.spark.csv") 
    .option("delimiter", "||") 
    .option("header", "true") 
    .option("inferSchema", "true") 
    .load("words.csv") 

и

words.write 
    .format("com.databricks.spark.csv") 
    .option("delimiter", "||") 
    .option("header", "true") 
    .save("words.csv") 
+0

Да, спасибо, это сработало. – user2122466

+0

Как добавить |^| разделитель в искровом выпуске csv? – SUDARSHAN

1

Вы можете решить эту проблему, аналогичную этому коде

val text = sc.textFile("fruit.csv") 
val word = text.map(l => l.split("\\|\\|") 
val last = word.map(w => w(w.size - 1)) 
last.distinct.collect 
+0

Спасибо. Он работал, но я также хотел сохранить результаты в виде файла csv. Я попытался сделать last.distinct.collect.saveAsTextFile(), но он не работает, заявив, что saveAsTextFile не является членом массива Array [String]. Не могли бы вы мне помочь? – user2122466

+0

@ user2122466 'saveAsTextFile' определяется на RDD. Каков тип 'last.distinct.collect'? – maasg

+0

@maasg: Это массив [строка]. Спасибо вам за это. – user2122466

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