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
Susan Sarandonasal
2024-12-31 14:33:11359semak imbas

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")
  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"))

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!

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