我試圖剝離通過saveAsTextFile保存的CSV數據中的包裝類或數組文本,而無需執行非Spark後處理步驟。格式(刪除class/parens)Spark CSV saveAsTextFile輸出?
我在一些大文件中有一些TSV數據,我將這些數據提供給RDD。
val testRdd = sc.textFile(_input).filter(!_.startsWith("unique_transaction_id")).map(x => x.toLowerCase).map(x => x.split('\t')).map(x => Test(x(0),x(1)))
testRdd.saveAsTextFile("test")
這樣可以節省類名包數據:
head -n 1 part-00000
Test("1969720fb3100608b38297aad8b3be93","active")
我也試過它消耗到一個無名類,而不是一個案例類(?)。
val testRdd = sc.textFile(_input).filter(!_.startsWith("unique_transaction_id")).map(x => x.toLowerCase).map(x => x.split('\t')).map(x => (x(0),x(1)))
testRdd.saveAsTextFile( 「test2的」)
這產生
("1969720fb3100608b38297aad8b3be93","active")
這仍然需要以除去纏繞的括號後處理。
爲了剝離包裹字符,我試過flatMap(),但RDD顯然是不正確的類型:
testRdd.flatMap(identity).saveAsTextFile("test3")
<console>:17: error: type mismatch;
found : ((String, String)) => (String, String)
required: ((String, String)) => TraversableOnce[?]
testRdd.flatMap(identity).saveAsTextFile("test3")
所以...我需要的RDD轉換成一些其他類型的RDD,還是有另一種方式將RDD保存爲CSV,這樣封裝文本就被剝離了?
謝謝!
完善。感謝您不僅回答問題,而且指出在單個map()調用中執行多個步驟的簡化。 – user2029783
不客氣! – eliasah