Heim >Datenbank >MySQL-Tutorial >Wie wähle ich die erste Zeile aus jeder Gruppe in einem Spark-DataFrame aus?
Auswahl der ersten Zeile im gruppierten DataFrame
Wenn Sie in Spark mit komplexen Datensätzen arbeiten, müssen Sie häufig anhand bestimmter Kriterien bestimmte Zeilen aus jeder Gruppe auswählen. Ein häufiges Szenario besteht darin, die erste Zeile aus jeder Gruppe auszuwählen und nach einer bestimmten Spalte zu sortieren.
Um die erste Zeile aus jeder Gruppe des DataFrame auszuwählen, können mehrere Methoden verwendet werden:
Fensterfunktion:
<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>
Einfache SQL-Aggregationen und Joins:
<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>
Struktursortierung:
<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>
DataSet-API:
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 oder höher:
<code>df.as[Record] .groupByKey(_.Hour) .reduceGroups((x, y) => if (x.TotalValue > y.TotalValue) x else y)</code>
Diese Methoden bieten mehrere Möglichkeiten, die erste Zeile aus jeder Gruppe basierend auf angegebenen Sortierkriterien auszuwählen. Die Wahl der Methode hängt von den spezifischen Anforderungen und Leistungsaspekten ab.
Das obige ist der detaillierte Inhalt vonWie wähle ich die erste Zeile aus jeder Gruppe in einem Spark-DataFrame aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!