Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Meniru Fungsi row_number() SQL dalam Spark Menggunakan RDD?

Bagaimana untuk Meniru Fungsi row_number() SQL dalam Spark Menggunakan RDD?

Barbara Streisand
Barbara Streisandasal
2024-12-24 01:18:19540semak imbas

How to Replicate SQL's row_number() Function in Spark Using RDDs?

Mendapatkan SQL Row_Number Equivalent untuk Spark RDD

Dalam SQL, fungsi row_number() membenarkan penjanaan nombor baris yang unik untuk setiap baris dalam jadual yang terbahagi dan tersusun. Kefungsian ini boleh direplikasi dalam Spark menggunakan RDD dan artikel ini menggariskan cara untuk mencapainya.

Pertimbangkan RDD dengan skema (K, V), dengan V mewakili tuple (col1, col2, col3). Matlamatnya adalah untuk mendapatkan RDD baharu dengan lajur tambahan yang mewakili nombor baris bagi setiap tupel, disusun oleh partition pada kekunci K.

Percubaan Pertama

Satu biasa pendekatan adalah untuk mengumpul RDD dan menyusunnya menggunakan fungsi seperti sortBy(), sortWith(), atau sortByKey(). Walau bagaimanapun, kaedah ini tidak mengekalkan aspek pembahagian fungsi row_number().

Pemesanan Sedar Pembahagian

Untuk mencapai nombor baris terbahagi, anda boleh memanfaatkan fungsi Tetingkap dalam Spark. Walau bagaimanapun, fungsi Window direka terutamanya untuk digunakan dengan DataFrames, bukan RDD.

Menggunakan DataFrames

Nasib baik, dalam Spark 1.4 dan seterusnya, kefungsian row_number() tersedia untuk DataFrames . Mengikuti contoh ini:

# Create a test DataFrame
testDF = sc.parallelize(
    (Row(k="key1", v=(1,2,3)),
     Row(k="key1", v=(1,4,7)),
     Row(k="key1", v=(2,2,3)),
     Row(k="key2", v=(5,5,5)),
     Row(k="key2", v=(5,5,9)),
     Row(k="key2", v=(7,5,5))
    )
).toDF()

# Add the partitioned row number
(testDF
 .select("k", "v",
         F.rowNumber()
         .over(Window
               .partitionBy("k")
               .orderBy("k")
              )
         .alias("rowNum")
        )
 .show()
)

Ini akan menjana DataFrame dengan nombor baris yang dipisahkan.

Atas ialah kandungan terperinci Bagaimana untuk Meniru Fungsi row_number() SQL dalam Spark Menggunakan 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