Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyimpan Lajur Bukan Agregat Selepas Spark DataFrame GroupBy?

Bagaimana untuk Menyimpan Lajur Bukan Agregat Selepas Spark DataFrame GroupBy?

Susan Sarandon
Lepaskan: 2024-12-31 14:33:11
asal
363 orang telah melayarinya

How to Keep Non-Aggregated Columns After a Spark DataFrame GroupBy?

Cara Mengekalkan Lajur Bukan Agregat dalam Spark DataFrame GroupBy

Apabila mengagregatkan data menggunakan kaedah DataFrame groupBy, DataFrame yang terhasil hanya mengandungi kumpulan -oleh kunci dan nilai agregat. Walau bagaimanapun, dalam beberapa kes, adalah wajar untuk turut memasukkan lajur bukan agregat daripada DataFrame asal dalam hasilnya.

Penghadan Spark SQL

Spark SQL mengikuti konvensyen SQL pra-1999, yang tidak membenarkan lajur tambahan dalam pertanyaan pengagregatan. Pengagregatan seperti kiraan menghasilkan hasil yang tidak ditakrifkan dengan baik apabila digunakan pada berbilang lajur, jadi sistem berbeza yang mengendalikan pertanyaan sedemikian mempamerkan gelagat yang berbeza-beza.

Penyelesaian:

Untuk mengekalkan bukan -lajur agregat dalam kumpulan Spark DataFrameBy, terdapat beberapa pilihan:

  1. Sertai DataFrame Asal: Sertai DataFrame terkumpul dengan DataFrame asal untuk menambah lajur yang tiada.
val aggregatedDf = df.groupBy(df("age")).agg(Map("id" -> "count"))
val joinedDf = aggregatedDf.join(df, Seq("age"), "left")
Salin selepas log masuk
  1. Gunakan Fungsi Tetingkap: Gunakan fungsi tetingkap seperti pertama atau terakhir untuk disertakan lajur tambahan dalam pertanyaan pengagregatan. Walau bagaimanapun, pendekatan ini boleh menjadi mahal dari segi pengiraan dalam senario tertentu.
import org.apache.spark.sql.expressions.Window
val windowSpec = Window.partitionBy(df("age"))
val aggregatedDf = df.withColumn("name", first(df("name")).over(windowSpec))
  .groupBy(df("age")).agg(Map("id" -> "count"))
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menyimpan Lajur Bukan Agregat Selepas Spark DataFrame GroupBy?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan