我想對使用apache spark的關鍵記錄對的關鍵字進行排序。密鑰長度爲10個字節,值大約爲90個字節。換句話說,我試圖複製用於break the sorting record的排序基準Databricks。我從文檔中注意到的一件事是,他們對鍵行號對進行了排序,而不是對關鍵記錄對進行排序,以便可能對緩存/ tlb友好。我試圖複製這種方法,但還沒有找到合適的解決方案。這是我曾嘗試:有序的火花RDD聯盟
var keyValueRDD_1 = input.map(x => (x.substring(0, 10), x.substring(12, 13)))
var keyValueRDD_2 = input.map(x => (x.substring(0, 10), x.substring(14, 98))
var result = keyValueRDD_1.sortByKey(true, 1) // assume partitions = 1
var unionResult = result.union(keyValueRDD_2)
var finalResult = unionResult.foldByKey("")(_+_)
當我這樣做的結果RDD和keyValueRDD_2 RDD工會和打印unionResultRDD,結果和keyValueRDD_2的輸出沒有被交織。換句話說,它看起來像unionResult RDD具有keyValueRDD_2內容和結果RDD內容。但是,當我執行將同一個鍵的值組合到單個鍵 - 值對中的foldByKey操作時,排序的順序被破壞。我需要通過鍵操作進行摺疊,以便將結果保存爲原始鍵記錄對。是否有可用於實現此功能的替代rdd函數?
任何提示或建議將是非常有用的。 謝謝
您是否試過'RDD.zip'和/或'RDD.zipWithIndex'? –
我對RDD zip的理解是,它會將兩個RDD元素的元素明智地壓縮。因此,當一個RDD被命令時,另一個RDD不會被排序,並且會導致@daniel指出的相同問題。謝謝。 –