簡體   English   中英

將管道分隔文件轉換為Spark DataFrame轉換為CSV文件

[英]Converting pipe-delimited file to spark dataframe to CSV file

我有一個只有一欄的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 ) )
 } )

但是這段代碼並沒有給我想要的正確結果。
有人可以幫我嗎?

您需要使用轉義符拆分特殊字符,因為拆分需要使用正則表達式

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

轉換為CSV有點棘手,因為數據字符串可能包含定界符(用引號引起來),換行符或其他對解析敏感的字符,因此我建議使用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")

您可以解決類似於此代碼的問題

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM