Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mensimulasikan Fungsi `ROW_NUMBER()` SQL dalam Spark RDD?

Bagaimana untuk Mensimulasikan Fungsi `ROW_NUMBER()` SQL dalam Spark RDD?

DDD
DDDasal
2024-12-22 09:41:57734semak imbas

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

SQL Row Number Equivalent in Spark RDD

Dalam Spark, mendapatkan nombor baris yang setara dengan row_number() SQL di atas (partition by .. . pesanan mengikut ...) untuk RDD boleh dicapai menggunakan Spark 1.4 yang dipertingkatkan kefungsian.

Penyelesaian:

  1. Buat Ujian 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. Pembahagian dengan Kunci dan Pesanan:

Gunakan fungsi rowNumber() yang diperkenalkan dalam Spark 1.4 untuk mencipta tetingkap terbahagi:

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. Output Hasil:
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)

Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan Fungsi `ROW_NUMBER()` SQL dalam Spark RDD?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn