在mysql中有group_concat,可以分组将各组的某列的值拼接到一个字段中去,而spark sql却没有这样的函数,但也有强大的函数来支持
1.新建测试表
+-------+---+ | name|age| +-------+---+ |Michael| 29| | Andy| 30| | Justin| 19| | Justin| 20| | LI| 20| +-------+---+
2.sql的实现方式
代码:
sqlContext.sql("select concat_ws(',',collect_set(name)) as names from people group by age").show()
返回值
+---------+---+ | names|age| +---------+---+ |LI,Justin| 20| | Justin| 19| | Michael| 29| | Andy| 30|
3.编码的实现方式
df.groupBy("age").agg(concat_ws(",",collect_set("name")).as("names"))
返回值
+---------+---+ | names|age| +---------+---+ |LI,Justin| 20| | Justin| 19| | Michael| 29| | Andy| 30|
具体函数详解参考