我想用火花來處理一個文件,但是我的輸入文件有一條信息遍佈3行的單個「記錄」。spark閱讀slipline的多行記錄
Rec1 Line1
Rec1 Line2
Rec1 Line3
Rec2 Line1
Rec2 Line2
Rec2 Line3
沒有鑰匙鏈接記錄的行,唯一的連接是他們是三行相鄰。除了知道第四行是新記錄的開始之外,沒有記錄分隔符。我看到的所有其他問題都與多行記錄有關,似乎有一些明顯的記錄分隔符,而在這種情況下我沒有任何記錄,我不得不依賴行數。
我首先想到的是使用sliding
函數從org.apache.spark.mllib.rdd.RDDFunctions
sc.textFile("myFile.txt").sliding(3,3)
這接通我的RDD [字符串]進入和RDD [陣列[字符串]]其中在RDD每個元素是從文件3行。
在一些測試中,這看起來像它的工作是得到我想要的結果,但我注意到sliding
函數在其評估過程中實際上導致collect
。這讓我擔心,它在收集什麼?它是整個數據文件還是其他的東西?我的文件太大而無法將全部內容收集到驅動程序中。
是sliding
是讀取此文件的最佳方式,還是有更高效的方法來執行此操作?
不能使用rdd.map(_。split(「」))。map(arr =>(arr [0],arr [1]))。groupBy(_._ 2)?這意味着按照空格分隔你的線條,製作一個鍵,值和按鍵分組。 – dumitru
@dumitru groupBy文件沒有密鑰。我也許可以使用'zipWithIndex'來獲得用於分組的密鑰。這也會導致全面洗牌。 – puhlen