我有一个文件中的数据,格式如下:
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等聚合.我想要行中的每个元素.
尝试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]| +---+---------------+