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

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

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 の行番号をレプリケートする方法

問題を理解する

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。