Как удалить спецсимвол в имени столбцов набора данных - PullRequest
0 голосов
/ 06 марта 2020

Кто-нибудь знает, как удалить специальный символ из имени столбцов набора данных в 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 ]

1 голос
/ 06 марта 2020

Каждый раз, когда запускается l oop, программа изменяет другое имя столбца (только одно) 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();
0 голосов
/ 06 марта 2020

Используйте .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|
//+--------------+----------+---------+---------+
0 голосов
/ 06 марта 2020
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|
+---+---+---+

Попробуйте что-то вроде выше.

...