如何在Spark RDD 複製SQL 的行編號
理解問題
理解問題理解問題
理解問題
理解問題
理解問題val sample_data = 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 temp1 = sc.parallelize(sample_data)
你想要為Spark RDD 中的每個條目產生連續的行號,按特定列排序並分區通過一個關鍵列。類似 SQL 的 row_number() over (partition by ... order by ...),但使用 Spark RDD。
您的初始嘗試
import org.apache.spark.sql.functions._ temp1.toDF("key", "col1", "col2", "col3").withColumn("rownum", rowNumber() over (Window partitionBy "key" orderBy desc("col2"), "col3")))
您的初始嘗試使用sortByKey 和 zipWithIndex,它們沒有產生所需的分割行號。請注意,sortBy 並不直接適用於 RDD,需要您先收集它們,從而導致非 RDD 輸出。
使用 Spark 1.4 的解決方案+---+----+----+----+------+ |key|col1|col2|col3|rownum| +---+----+----+----+------+ |1,2|1 |4 |7 |2 | |1,2|1 |2 |3 |1 | |1,2|2 |2 |3 |3 | |3,4|5 |5 |5 |1 | |3,4|5 |5 |9 |2 | |3,4|7 |5 |5 |3 | +---+----+----+----+------+資料準備使用 (K, (col1, col2, col3)).產生分割行號在分割視窗上使用rowNumber 為每個鍵產生行號:範例輸出
以上是如何在 Spark RDD 中產生連續行號,類似 SQL 的「row_number()」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!