Pemilihan baris pertama dalam DataFrame berkumpulan
Apabila bekerja dengan set data kompleks dalam Spark, anda selalunya perlu memilih baris tertentu daripada setiap kumpulan berdasarkan kriteria tertentu. Senario biasa ialah memilih baris pertama daripada setiap kumpulan dan mengisih mengikut lajur tertentu.
Untuk memilih baris pertama daripada setiap kumpulan DataFrame, beberapa kaedah boleh digunakan:
Fungsi tetingkap:
<code>import org.apache.spark.sql.functions._ import org.apache.spark.sql.expressions.Window // 创建一个带有分组数据的 DataFrame val df = sc.parallelize(Seq((0, "cat26", 30.9), (0, "cat13", 22.1), (0, "cat95", 19.6), (0, "cat105", 1.3), (1, "cat67", 28.5), (1, "cat4", 26.8), (1, "cat13", 12.6), (1, "cat23", 5.3), (2, "cat56", 39.6), (2, "cat40", 29.7), (2, "cat187", 27.9), (2, "cat68", 9.8), (3, "cat8", 35.6))).toDF("Hour", "Category", "TotalValue") // 创建窗口规范 val w = Window.partitionBy($"Hour").orderBy($"TotalValue".desc) // 计算每个组的行号 val dfTop = df.withColumn("rn", row_number.over(w)).where($"rn" === 1).drop("rn") // 显示每个组的第一行 dfTop.show</code>
Penggabungan dan gabungan SQL yang mudah:
<code>val dfMax = df.groupBy($"Hour".as("max_hour")).agg(max($"TotalValue").as("max_value")) val dfTopByJoin = df.join(broadcast(dfMax), ($"Hour" === $"max_hour") && ($"TotalValue" === $"max_value")) .drop("max_hour") .drop("max_value") dfTopByJoin.show</code>
Isih struktur:
<code>val dfTop = df.select($"Hour", struct($"TotalValue", $"Category").alias("vs")) .groupBy($"Hour") .agg(max("vs").alias("vs")) .select($"Hour", $"vs.Category", $"vs.TotalValue") dfTop.show</code>
API Set Data:
Spark 1.6:
<code>case class Record(Hour: Integer, Category: String, TotalValue: Double) df.as[Record] .groupBy($"Hour") .reduce((x, y) => if (x.TotalValue > y.TotalValue) x else y) .show</code>
Spark 2.0 atau lebih tinggi:
<code>df.as[Record] .groupByKey(_.Hour) .reduceGroups((x, y) => if (x.TotalValue > y.TotalValue) x else y)</code>
Kaedah ini menyediakan pelbagai cara untuk memilih baris pertama daripada setiap kumpulan berdasarkan kriteria pengisihan yang ditentukan. Pilihan kaedah bergantung pada keperluan khusus dan pertimbangan prestasi.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris Pertama daripada Setiap Kumpulan dalam Spark DataFrame?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!