需求
将课程和人员列进行分组,然后将人员列聚合为逗号分隔的字符串。
数据
course | person
Math | Alice
Math | Bob
Math | Charlie|
Science| David
Science| Emily
Science| Frank
sql代码:
SELECT 课程, GROUP_CONCAT(人员 ORDER BY 人员 SEPARATOR ',') AS 课程所有人员
FROM 表
GROUP BY 课程;
spark代码
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._ val spark = SparkSession.builder() .appName("CourseMembers") .master("local[*]") // 在本地运行,使用所有可用核 .getOrCreate() // 数据存在一个叫做 "courses" 的 DataFrame 中
val courses = spark.read.format("csv").option("header", "true").load("path_to_your_data.csv") // 使用 groupBy 和 agg 函数来根据课程名聚合,并使用 collect_list 函数将人员列聚合为逗号分隔的字符串
val courseMembers = courses.groupBy("course").agg(concat_ws(",", "person").alias("course_members")) // 结果
courseMembers.show()
结果
Math | Alice,Bob,Charlie
Science| David,Emily,Frank