将管道分隔文件转换为spark dataframe到csv文件

dohp0rv5  于 2021-07-09  发布在  Spark
关注(0)|答案(2)|浏览(237)

我有一个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 ) )
 } )

但是这个代码并没有给我想要的正确结果。
有人能帮我吗?

s3fp2yjn

s3fp2yjn1#

对于特殊字符,需要使用转义进行拆分,因为拆分需要正则表达式

.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")
mfuanj7w

mfuanj7w2#

您可以像下面的代码一样解决这个问题

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

相关问题