So behalten Sie nicht aggregierte Spalten in Spark DataFrame GroupBy bei
Beim Aggregieren von Daten mit der GroupBy-Methode von DataFrame enthält der resultierende DataFrame nur die Gruppe -by-Schlüssel und die aggregierten Werte. In manchen Fällen kann es jedoch wünschenswert sein, auch nicht aggregierte Spalten aus dem ursprünglichen DataFrame in das Ergebnis einzubeziehen.
Einschränkung von Spark SQL
Spark SQL folgt die Konvention von SQL vor 1999, die keine zusätzlichen Spalten in Aggregationsabfragen zulässt. Aggregationen wie „count“ führen zu Ergebnissen, die nicht genau definiert sind, wenn sie auf mehrere Spalten angewendet werden. Daher zeigen unterschiedliche Systeme, die solche Abfragen verarbeiten, ein unterschiedliches Verhalten.
Lösung:
Um nicht zu erhalten -aggregierte Spalten in einer Spark DataFrame-Gruppe. Es gibt mehrere Optionen:
val aggregatedDf = df.groupBy(df("age")).agg(Map("id" -> "count")) val joinedDf = aggregatedDf.join(df, Seq("age"), "left")
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"))
Das obige ist der detaillierte Inhalt vonWie behalte ich nicht aggregierte Spalten nach einem Spark DataFrame GroupBy?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!