2016-11-09 96 views
1

我试图从我的本地文件夹读取和写入数据,但是我的数据不完全相同。将值保存在spark中

val data =sc.textFile("/user/cts367689/datagen.txt") 

val a=data.map(line=>(line.split(",")(0).toInt+line.split(",")(4).toInt,line.split(",")(3),line.split(",")(2))) 

a.saveAsTextFile("/user/cts367689/sparkoutput") 

输出:

(526,female,avil) 
(635,male,avil) 
(983,male,paracetamol)  
(342,female,paracetamol)  
(158,female,avil) 

如何节省输出如下,需要卸下支架。

预期结果:

526,female,avil 
635,male,avil  
983,male,paracetamol 
342,female,paracetamol  
158,female,avil 
+0

您正在保存元组对象的RDD到一个文件,所以是的,你会得到括号。你有没有试图创建一个数据框并保存? –

回答

1
val a = data.map (
    line => 
    (line.split(",")(0).toInt + line.split(",")(4).toInt) + "," + 
    line.split(",")(3) + "," + 
    line.split(",")(2) 
) 

尝试这样做,而不是在()返回它的。这使得一个元组。

1

火花具有处理非结构化文件的能力。你正在使用这些功能。

对于CSV(逗号分隔值)文件,有一些好的库可以做同样的事情。 你可以看看这个link

为你的问题,答案如下所示。

import org.apache.spark.sql.SQLContext 

SQLContext sqlContext = new SQLContext(sc); 
DataFrame df = sqlContext.read() 
    .format("com.databricks.spark.csv") 
    .option("inferSchema", "true") 
    .option("header", "false") 
    .load("/user/cts367689/datagen.txt"); 

df.select("id", "gender", "name").write() 
    .format("com.databricks.spark.csv") 
    .option("header", "true") 
    .save("/user/cts367689/sparkoutput"); 
1

使用:

val a = data.map(line => line.split(",")(0).toInt+line.split(",")(4).toInt+","+line.split(",")(3)+","+line.split(",")(2)) 
+0

其工作..谢谢! – vivman