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