如何删除数据集列名称中的特殊字符

时间:2020-03-06 10:48:25

标签: apache-spark spark-java

任何人都知道如何从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|

有什么需要帮助的吗? 谢谢。

3 个答案:

答案 0 :(得分:1)

每次循环运行时,程序都会更改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();

答案 1 :(得分:0)

scala> val data = Seq((1,2,3),(1,2,3)).toDF("A_a","B_b","C_c")
scala> data.columns.foldLeft(data)((df,column)=> df.withColumnRenamed(column, column.replaceAll("_"," "))
scala> res1.show
+---+---+---+
|A a|B b|C c|
+---+---+---+
|  1|  2|  3|
|  1|  2|  3|
+---+---+---+

尝试上述类似方法。

答案 2 :(得分:0)

再次使用 .toDF() 数据框和新的列名。

Example:

val df=Seq((1,2,3,4)).toDF("PARTITION_DATE","date_start","dt_con_id","dt_fin_id")

df.toDF(df.columns.map(x => x.replaceAll("_"," ")):_*).show()

//+--------------+----------+---------+---------+
//|PARTITION DATE|date start|dt con id|dt fin id|
//+--------------+----------+---------+---------+
//|             1|         2|        3|        4|
//+--------------+----------+---------+---------+