任何人都知道如何从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|
有什么需要帮助的吗? 谢谢。
答案 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|
//+--------------+----------+---------+---------+