2017-03-26 143 views
0

阅读csv文件到地图状结构我有格式的CSV文件:火花:使用阶

key, age, marks, feature_n 
abc, 23, 84, 85.3 
xyz, 25, 67, 70.2 

这里的特征的数量可以变化。例如:我有3个特征(年龄,标记和feature_n)。我将其转换成一个Map [字符串,字符串]如下:

[key,value] 
["abc","age:23,marks:84,feature_n:85.3"] 
["xyz","age:25,marks:67,feature_n:70.2"] 

我不得不加入在柱上“关键”与另一数据集A中的上述数据和“值”追加到数据集的另一列A.可以将csv文件加载到具有模式的数据框中(模式由csv文件的第一行定义)。

val newRecords = sparkSession.read.option("header", "true").option("mode", "DROPMALFORMED").csv("/records.csv"); 

帖子这个我会加入与DataSet中的数据框newRecords和“价值”追加到数据集A的

我如何可以遍历每一行每一列的一列,但不包括列“key”并从newRecords生成格式字符串“age:23,marks:84,feature_n:85.3”?

我可以改变csv文件的格式,并在JSON格式的数据,如果有帮助。

我对Scala和Spark相当陌生。

+0

这看起来像一个标准地图/收集操作给我。你能否澄清你遇到的问题? –

+0

功能的数量可以变化。我试图通过命名为feature_n的最后一个功能来表示相同的功能。所以我需要遍历可变数量的列来生成最终的字符串。对不起,这个问题并不明确。 – user2804130

回答

0

我建议以下解决方案:

val updated:RDD[String]=newRecords.drop(newRecords.col("key")).rdd.map(el=>{val a=el.toSeq;val st= "age"+a.head+"marks:"+a(1)+" feature_n:"+a.tail; st})

+0

功能的数量可以变化。我试图通过命名为feature_n的最后一个功能来表示相同的功能。所以我需要遍历可变数量的列来生成最终的字符串。对不起,这个问题并不明确。 – user2804130