如何使用Spark Dataset API聚合Key-List?

时间:2017-03-22 09:47:55

标签: scala apache-spark dataset

使用Spark 2.x,从Dataset开始:

|keyword    |url
|A1         |url1
|A1         |url2
|A1         |url3
|A1         |url4
|A2         |url1
|A2         |url2
|A2         |url3

我怎样才能获得:

|keyword    |url
|A1         |url1,url2,url3,url4
|A2         |url1,url2,url3

2 个答案:

答案 0 :(得分:4)

试试这个

import org.apache.spark.sql.functions._
val df = myDataset.groupBy("keyword").agg(collect_list("url"))

agg()GroupBy()一起使用可让您在agg()下执行所需操作,您将获得collect_set()sum()等方法。

答案 1 :(得分:0)

除了接受的答案,如果你想以lambda方式做同样的事情

        baseDS.rdd.filter { x => !x.getAs[String](0).contains("keyword") }.map { x =>
      (x.get(0), x.get(1))
    }.groupByKey().foreach(println(_))

注意:可以使用架构定义跳过 filter()操作

<强>结果

(A1,CompactBuffer(url1,url2,url3,url4))

(A2,CompactBuffer(url1,url2,url3))