ホームページ >データベース >mysql チュートリアル >Spark RDD で SQL の「ROW_NUMBER()」関数をシミュレートする方法

Spark RDD で SQL の「ROW_NUMBER()」関数をシミュレートする方法

DDD
DDDオリジナル
2024-12-22 09:41:57660ブラウズ

How to Simulate SQL's `ROW_NUMBER()` Function in Spark RDD?

Spark RDD で同等の SQL 行番号

Spark では、SQL の row_number() に相当する行番号を取得します (.. RDD の .order by ...) は、Spark 1.4 の拡張機能を使用して実現できます。

解決策:

  1. テスト RDD の作成:
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)
  1. キーによるパーティション分割と順序:

Spark 1.4 で導入された rowNumber() 関数を使用して、パーティション分割されたウィンドウを作成します:

import org.apache.spark.sql.expressions.Window

val partitionedRdd = temp1
  .map(x => (x._1, x._2._1, x._2._2, x._2._3))
  .groupBy(_._1)
  .mapGroups((_, entries) =>
    entries.toList
      .sortBy(x => (x._2, -x._3, x._4))
      .zipWithIndex
      .map(x => (x._1._1, x._1._2, x._1._3, x._1._4, x._2 + 1))
  )
  1. 結果の出力:
partitionedRdd.foreach(println)

// Example output:
// ((1,2),1,4,7,1)
// ((1,2),1,2,3,2)
// ((1,2),2,2,3,3)
// ((3,4),5,5,5,4)
// ((3,4),5,5,9,5)
// ((3,4),7,5,5,6)

以上がSpark RDD で SQL の「ROW_NUMBER()」関数をシミュレートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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