使用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
答案 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))