关于spark dataframe ,这里介绍三种实用中实现可能比较麻烦的操作,首先上原始数据集 mRecord:
一,合并content列,将name相同的content合并到一行,用逗号隔开:
mRecord.createOrReplaceTempView("test");
val Df1 = sparkSQL.sql("select name,concat_ws(',',collect_set(content)) as contents from test group by name");
Df1.show(false);
结果如下:
二、将contents列的内容根据逗号分隔成三列:
val Df2 = Df1.withColumn("splitcol",split(col("contents"), ",")).select(
col("splitcol").getItem(0).as("col1"),
col("splitcol").getItem(1).as("col2"),
col("splitcol").getItem(2).as("col3")
).drop("splitcol");
Df2.show(false);
结果如下:
三、将一中的contents还原最初状态,及将一列的内容根据逗号分隔成多行:
val Df3 = Df1.withColumn("arrayCol",split(col("contents"),",")).withColumn("expCol",explode(col("arrayCol")));
Df3.show(false);
结果如下:
注意expCol列的内容