生产环境_sql获spark将课程与对应的选课人员以逗号分隔的形式存储

需求

将课程和人员列进行分组,然后将人员列聚合为逗号分隔的字符串。

数据

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
 

猜你喜欢

转载自blog.csdn.net/qq_52128187/article/details/134670231