Cara Alternatif untuk Mendapatkan Lajur Tambahan dalam Spark DataFrame GroupBy
Apabila melakukan operasi groupBy pada Spark DataFrame, anda mungkin menghadapi isu hanya mendapatkan semula lajur kumpulan dan hasil fungsi agregat, meninggalkan lajur lain daripada lajur DataFrame asal.
Untuk menangani perkara ini, anda boleh mempertimbangkan dua pendekatan utama:
Spark SQL mematuhi konvensyen pra-SQL:1999, melarang kemasukan lajur tambahan dalam pengagregatan pertanyaan. Oleh itu, anda boleh mengagregatkan data yang diperlukan dan kemudiannya menyambungkannya kembali ke DataFrame asal. Ini boleh dicapai menggunakan kaedah selectExpr dan sertai, seperti yang ditunjukkan di bawah:
// Aggregate the data val aggDF = df.groupBy(df("age")).agg(Map("id" -> "count")) // Rename the aggregate function's result column for clarity val renamedAggDF = aggDF.withColumnRenamed("count(id)", "id_count") // Join the aggregated results with the original DataFrame val joinedDF = df.join(renamedAggDF, df("age") === renamedAggDF("age"))
Sebagai alternatif, anda boleh gunakan fungsi tetingkap untuk mengira lajur tambahan dan mengekalkannya dalam DataFrame terkumpul. Kaedah ini terutamanya melibatkan penentuan bingkai tetingkap di atas lajur pengumpulan dan menggunakan fungsi agregat untuk mendapatkan semula data yang dikehendaki.
// Get the row number within each age group val window = Window.partitionBy(df("age")).orderBy(df("age")) // Use the window function to calculate the cumulative count of ids val dfWithWindow = df.withColumn("id_count", count("id").over(window))
Setelah anda menggunakan teknik ini, anda akan dapat mendapatkan semula lajur tambahan yang diperlukan semasa melaksanakan operasi kumpulanBy pada Spark DataFrame anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memasukkan Lajur Tambahan dalam Spark DataFrame Saya Selepas Operasi GroupBy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!