分區資料的SQL Row_Number 的Spark RDD 等效項
在SQL 中,row_number() 為分區資料集中的行產生序列號。 Spark RDD 中不直接提供此功能。但是,有一些解決方法可以實現類似的功能。
對 RDD 進行分區
分區對於在群組內產生行號至關重要。在您的情況下,您需要在排序之前按 key_value (K) 對 RDD 進行分區。考慮更新後的程式碼:
val temp2 = temp1 .map(x => (x._1, (x._2, x._3, x._4))) .sortBy(a => (a._1, -a._2._2, -a._2._3)) .zipWithIndex .map(a => (a._1._1, a._1._2._1, a._1._2._2, a._1._2._3, a._2 + 1))
透過將sortBy 套用到(a._1, -a._2._2, -a._2._3),您將根據key_value 進行排序,然後按降序排列col2,最後是降序的col3,模仿SQL row_number() 行為。
添加行Numbers
分區和排序後,您可以使用zipWithIndex 添加行號:
val rowNums = temp2.map(a => (a._1, a._2, a._3, a._4, a._5)).cache()
注意: 回應中提供的DataFrame 實作是針對DataFrame 的解決方案,但不適用於RDD。
以上是如何使用 Spark RDD 複製 SQL 的 row_number() 功能來處理分割資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!