在 SQL 中,row_number() 函數為表中的每筆記錄分配唯一的行號,按給定的一組列進行分區並按另一組進行排序。可以使用以下步驟為Spark RDD 複製此功能:
1.建立鍵值對的PairRDD
將元組(K, V) 的RDD 轉換為( K, (V, 1)) 對的PairRDD。這將允許基於鍵 K 和占位符值 1.
2 應用排序。對 RDD 進行排序
使用 sortByKey() 根據鍵 K 對 PairRDD 進行排序。這會將具有相同鍵的所有記錄分組在一起。
3. Zip With Index
在已排序的 RDD 上呼叫 zipWithIndex() 以新增表示每個鍵分區內的行號的額外列。
4.組合鍵、值和行號
使用映射函數從PairRDD 中提取鍵、值和行號,並將它們組合成一個新的元組(K、V、rowNum)。
此程序可讓您為 RDD 中的每筆記錄指派行號,從而有效複製 SQL 的 row_number() 函數的功能分割區。
範例:
val temp1 = sc.parallelize(Seq(((3,4),5,5,5),((3,4),5,5,9),((3,4),7,5,5),((1,2),1,2,3),((1,2),1,4,7),((1,2),2,2,3))) val temp2 = temp1 .map(x => (x, 1)) .sortByKey() .zipWithIndex() .map(a => (a._1._1, a._1._2._1, a._1._2._2, a._1._2._3, a._2 + 1)) temp2.collect().foreach(println)
輸出:
((1,2),1,2,3,2) ((1,2),1,4,7,1) ((1,2),2,2,3,3) ((3,4),5,5,5,4) ((3,4),5,5,9,5) ((3,4),7,5,5,6)
以上是如何使用 Spark RDD 複製 SQL 的「row_number()」函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!