Scala 如何按数据帧上的列进行分组,并对分组的所有行的列应用单个值?
我有一个数据帧(scala),我想在数据帧上执行如下操作: 我想按列“a”分组,从分组列中选择列1中的任何值,并将其应用于所有行。即,对于a=1,则b在所有3行上应为x或y或h,其余列应不受影响。Scala 如何按数据帧上的列进行分组,并对分组的所有行的列应用单个值?,scala,apache-spark,dataframe,spark-dataframe,Scala,Apache Spark,Dataframe,Spark Dataframe,我有一个数据帧(scala),我想在数据帧上执行如下操作: 我想按列“a”分组,从分组列中选择列1中的任何值,并将其应用于所有行。即,对于a=1,则b在所有3行上应为x或y或h,其余列应不受影响。 有什么帮助吗?您可以尝试一下,也就是说,创建另一个包含a,b列的数据框,其中b每个a有一个值,然后将其与原始数据框连接起来: import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions.ro
有什么帮助吗?您可以尝试一下,也就是说,创建另一个包含
a,b
列的数据框,其中b
每个a
有一个值,然后将其与原始数据框连接起来:
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.row_number
val w = Window.partitionBy($"a").orderBy($"b")
// create the window object so that we can create a column that gives unique row number
// for each unique a
(df.withColumn("rn", row_number.over(w)).where($"rn" === 1).select("a", "b")
// create the row number column for each unique a and choose the first row for each group
// which returns a reduced data frame one row per group
.join(df.select("a", "c"), Seq("a"), "inner").show)
// join the reduced data frame back with the original data frame(a,c columns), then b column
// will have just one value
+---+---+---+
| a| b| c|
+---+---+---+
| 1| h| g|
| 1| h| y|
| 1| h| x|
| 2| c| d|
| 2| c| x|
你也能分享实际的数据帧吗..刚刚添加了解释。