当前位置:  开发笔记 > 数据库 > 正文

Spark:如何按DataFrame中的不同值进行分组

如何解决《Spark:如何按DataFrame中的不同值进行分组》经验,为你挑选了1个好方法。

我有一个文件中的数据,格式如下:

1,32    
1,33
1,44
2,21
2,56
1,23

我正在执行的代码如下:

val sqlContext = new org.apache.spark.sql.SQLContext(sc) 

import spark.implicits._
import sqlContext.implicits._

case class Person(a: Int, b: Int)

val ppl = sc.textFile("newfile.txt").map(_.split(","))
    .map(p=> Person(p(0).trim.toInt, p(1).trim.toInt))
    .toDF()
ppl.registerTempTable("people")

val result = ppl.select("a","b").groupBy('a).agg()
result.show

预期产出是:

a 32, 33, 44, 23

b 21, 56 

而不是按sum,count,mean等聚合.我想要行中的每个元素.



1> Rajat Mishra..:

尝试collect_set里面的功能agg()

val df = sc.parallelize(Seq(
  (1,3), (1,6), (1,5), (2,1),(2,4)
  (2,1))).toDF("a","b")

+---+---+
|  a|  b|
+---+---+
|  1|  3|
|  1|  6|
|  1|  5|
|  2|  1|
|  2|  4|
|  2|  1|
+---+---+

val df2 = df.groupBy("a").agg(collect_set("b")).show()

+---+--------------+
|  a|collect_set(b)|
+---+--------------+
|  1|     [3, 6, 5]|
|  2|        [1, 4]|
+---+--------------+

如果你想要重复的条目,可以使用 collect_list

val df3 = df.groupBy("a").agg(collect_list("b")).show() 

+---+---------------+
|  a|collect_list(b)|
+---+---------------+
|  1|      [3, 6, 5]|
|  2|      [1, 4, 1]|
+---+---------------+

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有