scala - Spark:如何在 groupedData 中获取带有条件的结果集

Posted

技术标签:

【中文标题】scala - Spark:如何在 groupedData 中获取带有条件的结果集【英文标题】:scala - Spark : how to get the resultSet with condition in a groupedData 【发布时间】:2017-04-17 09:11:50 【问题描述】:

有没有办法使用自己的架构到组Dataframe

这是产生格式的数据:

Country | Class | Name | age
US, 1,'aaa',21
US, 1,'bbb',20
BR, 2,'ccc',30
AU, 3,'ddd',20
....

我想做一些类似的事情

Country | Class 1 Students | Class 2 Students
US , 2, 0
BR , 0, 1
....

条件 1. 国家分组。 条件 2. 只获得 1 或 2 个类值

这是一个源代码..

val df = Seq(("US", 1, "AAA",19),("US", 1, "BBB",20),("KR", 2, "CCC",29),
 ("AU", 3, "DDD",18)).toDF("country", "class", "name","age")

df.groupBy("country").agg(count($"name") as "Cnt")

【问题讨论】:

【参考方案1】:

你应该使用pivot函数。

val df = Seq(("US", 1, "AAA",19),("US", 1, "BBB",20),("KR", 2, "CCC",29),
 ("AU", 3, "DDD",18)).toDF("country", "class", "name","age")
df.groupBy("country").pivot("class").agg(count($"name") as "Cnt").show

+-------+---+---+---+
|country|  1|  2|  3|
+-------+---+---+---+
|     AU|  0|  0|  1|
|     US|  2|  0|  0|
|     KR|  0|  1|  0|
+-------+---+---+---+

【讨论】:

我找不到重命名列的方法。 val rs=df.groupBy("country").pivot("class").agg(count($"name") as "Cnt") rs.select(col("country" ),col("1").as("Class1"),col("2").as("Class2")).show()

以上是关于scala - Spark:如何在 groupedData 中获取带有条件的结果集的主要内容,如果未能解决你的问题,请参考以下文章

Spark Scala聚合函数,用于查找组中列值的出现次数

Scala中的Spark分组映射UDF

API brief(spark for scala )

如何在 Spark/Scala 中使用 countDistinct?

如何在 Spark/Scala 中查找具有许多空值的列

spark Group By数据框列没有聚合[重复]