2017-03-26 141 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