首页 > 解决方案 > 如何删除数据集列名称中的特殊字符

问题描述

任何人都知道如何从 Spark Java 中的数据集列名称中删除特殊字符?

我想将“_”替换为“”(参见下面的示例)。

输入:(df_in)

+--------------+-----------------+------------+------------+
|PARTITION_DATE|       date_start|   dt_con_ID|   dt_fin_ID|
+--------------+-----------------+------------+------------+
|    2020/03/03|2019-10-14 00:00:| 11000295001|   110100156|

所需输出:(df_out)

    +--------------+-----------------+------------+------------+
    |PARTITION DATE|       date start|   dt con ID|   dt fin ID|
    +--------------+-----------------+------------+------------+
    |    2020/03/03|2019-10-14 00:00:| 11000295001|   110100156|

我试图用代码得到这个输出:

String[] colsToRename = df_in.columns();
for (String headerName : df_in.columns()) {
    Dataset<Row> df_out = df_in.withColumnRenamed(headerName, headerName.replaceAll("_", " "));
    df_out.show();
}

但是有了这个,我只修改了最后一个列名

        +--------------+-----------------+------------+------------+
        |PARTITION_DATE|       date_start|   dt_con_ID|   dt fin ID|
        +--------------+-----------------+------------+------------+
        |    2020/03/03|2019-10-14 00:00:| 11000295001|   110100156|

标签: apache-spark

解决方案


每次循环运行时,程序都会更改 df_in 的不同列名(只有一个),并将更新的值放入 df_out。但是您希望同时更改所有这些。

尝试这个:

String[] colsToRename = df_in.columns();

Dataset<Row> df_out = df_in;
for (String headerName : df_out.columns()) {
   Dataset<Row> df_out = df_out.withColumnRenamed(headerName, headerName.replaceAll("_", " "));
}
df_out.show();

推荐阅读