#regex #scala #apache-spark #apache-spark-sql
#scala #apache-spark #apache-spark-sql
Вопрос:
Как я могу удалить все
символы, являющиеся частью строк, из нескольких столбцов в spark DF?
Пример строки:
11~ADX|0.00|ZZ|BP|WHT~SE|41|0064~GE|0001
Ожидаемый результат:
11~ADX|0.00|ZZ|BP|WHT~SE|41|0064~GE|0001
Ответ №1:
Используйте foldLeft
для всех столбцов в dataframe, таким образом, вы можете использовать regexp_replace
для каждого отдельного столбца и возвращать конечный dataframe. Используя пример фрейма данных в вопросе (названный df
ниже), чтобы удалить все обратные косые черты:
val df2 = df.columns.foldLeft(df)((df, c) => df.withColumn(c, regexp_replace(col(c), "\\", "")))
Вы также могли бы избежать всех обратных косых черт с помощью следующего:
val df2 = df.columns.foldLeft(df)((df, c) => df.withColumn(c, regexp_replace(col(c), "\\", "\\\\")))
Если не все столбцы должны использоваться, создайте отдельную переменную, содержащую используемые столбцы. Чтобы использовать все столбцы, кроме одного (столбец col
ниже), используйте:
val cols = df.columns diff List("col")
cols.foldLeft ...