首頁 >資料庫 >mysql教程 >如何在 Spark RDD 中產生連續行號,類似 SQL 的「row_number()」?

如何在 Spark RDD 中產生連續行號,類似 SQL 的「row_number()」?

Barbara Streisand
Barbara Streisand原創
2024-12-20 05:40:09834瀏覽

How to Generate Sequential Row Numbers in Spark RDDs, Similar to SQL's `row_number()`?

如何在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn