Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何按数据帧上的列进行分组,并对分组的所有行的列应用单个值?_Scala_Apache Spark_Dataframe_Spark Dataframe - Fatal编程技术网

Scala 如何按数据帧上的列进行分组,并对分组的所有行的列应用单个值?

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

我有一个数据帧(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.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|

你也能分享实际的数据帧吗..刚刚添加了解释。