Как удалить обратную косую черту из всех столбцов в Spark dataframe?

#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 ...