将值保存在spark中
问题描述:
我试图从我的本地文件夹读取和写入数据,但是我的数据不完全相同。将值保存在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
答
val a = data.map (
line =>
(line.split(",")(0).toInt + line.split(",")(4).toInt) + "," +
line.split(",")(3) + "," +
line.split(",")(2)
)
尝试这样做,而不是在()
返回它的。这使得一个元组。
答
火花具有处理非结构化文件的能力。你正在使用这些功能。
对于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");
答
使用:
val a = data.map(line => line.split(",")(0).toInt+line.split(",")(4).toInt+","+line.split(",")(3)+","+line.split(",")(2))
+0
其工作..谢谢! – vivman
您正在保存元组对象的RDD到一个文件,所以是的,你会得到括号。你有没有试图创建一个数据框并保存? –