Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Rekod N Teratas untuk Setiap Kumpulan dalam Spark DataFrame?

Bagaimana untuk Mendapatkan Rekod N Teratas untuk Setiap Kumpulan dalam Spark DataFrame?

DDD
Lepaskan: 2024-12-23 11:46:36
asal
437 orang telah melayarinya

How to Get the Top N Records for Each Group in a Spark DataFrame?

Mendapatkan TopN untuk Setiap Kumpulan dalam DataFrame

Dalam Spark DataFrame, kita selalunya perlu mengumpulkan data mengikut lajur tertentu dan mendapatkan bahagian atas N rekod daripada setiap kumpulan. Contohnya, anda mempunyai DataFrame dengan data penilaian item pengguna dan anda ingin mencari item yang dinilai paling tinggi untuk setiap pengguna.

Scala Solution

The Scala penyelesaian kepada masalah ini melibatkan penggunaan fungsi tetingkap pangkat. Begini cara anda boleh melakukannya:

  1. Tentukan nilai N teratas:

    val n: Int = ???
    Salin selepas log masuk
  2. Buat definisi tetingkap untuk membahagikan data oleh pengguna lajur dan susun rekod mengikut susunan menurun penilaian:

    val w = Window.partitionBy($"user").orderBy(desc("rating"))
    Salin selepas log masuk
  3. Tambahkan lajur kedudukan pada DataFrame menggunakan fungsi pangkat:

    df.withColumn("rank", rank().over(w))
    Salin selepas log masuk
  4. Tapis DataFrame untuk disimpan sahaja rekod N teratas daripada setiap satu kumpulan:

    df.where($"rank" <= n)
    Salin selepas log masuk

Alternatif dengan Nombor Baris

Jika anda tidak perlu memutuskan hubungan, anda boleh menggunakan fungsi row_number sebaliknya daripada fungsi pangkat. Ini akan memberi anda nombor baris unik untuk setiap rekod dalam setiap kumpulan:

df.withColumn("row_number", row_number().over(w))
Salin selepas log masuk

Anda kemudiannya boleh menapis DataFrame untuk menyimpan hanya rekod N teratas daripada setiap kumpulan menggunakan kriteria yang sama seperti sebelum ini.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod N Teratas untuk Setiap Kumpulan dalam Spark DataFrame?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan