ホームページ > データベース > mysql チュートリアル > SQL の「row_number()」と同様に、Spark RDD で連続した行番号を生成するにはどうすればよいですか?

SQL の「row_number()」と同様に、Spark RDD で連続した行番号を生成するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-20 05:40:09
オリジナル
836 人が閲覧しました

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

Spark RDD で SQL の行番号をレプリケートする方法

問題を理解する

Spark RDD 内の各エントリに対して、特定の列ごとに順序付けされた連続した行番号を生成します。キー列によってパーティション化されます。 SQL の row_number() over (partition by ... order by ...) と似ていますが、Spark RDD を使用します。

Your Initial Attempt

Your 最初の試行は使用されましたsortByKey および zipWithIndex では、必要なパーティション化された行番号が生成されませんでした。 sortBy は RDD に直接適用できないため、最初に RDD を収集する必要があり、非 RDD 出力になることに注意してください。

Spark 1.4 を使用したソリューション

データの準備

次の形式のタプルを使用して RDD を作成します(K, (col1,col2,col3)).

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)
ログイン後にコピー

分割された行番号の生成

分割されたウィンドウで rowNumber を使用して、各キーの行番号を生成します:

import org.apache.spark.sql.functions._

temp1.toDF("key", "col1", "col2", "col3").withColumn("rownum", rowNumber() over (Window partitionBy "key" orderBy desc("col2"), "col3")))
ログイン後にコピー

例出力

+---+----+----+----+------+
|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     |
+---+----+----+----+------+
ログイン後にコピー

以上がSQL の「row_number()」と同様に、Spark RDD で連続した行番号を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート