spark dataframe 一列分隔多列,一列分隔多行(scala)

关于spark dataframe ,这里介绍三种实用中实现可能比较麻烦的操作,首先上原始数据集 mRecord:

spark dataframe 一列分隔多列,一列分隔多行(scala)_第1张图片

一,合并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);

结果如下:

spark dataframe 一列分隔多列,一列分隔多行(scala)_第2张图片

二、将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);

结果如下:

spark dataframe 一列分隔多列,一列分隔多行(scala)_第3张图片

三、将一中的contents还原最初状态,及将一列的内容根据逗号分隔成多行:

        val Df3 = Df1.withColumn("arrayCol",split(col("contents"),",")).withColumn("expCol",explode(col("arrayCol")));
        Df3.show(false);

结果如下:

spark dataframe 一列分隔多列,一列分隔多行(scala)_第4张图片

注意expCol列的内容

你可能感兴趣的:(spark)