如何从 Spark 数据框中的所有列中删除反斜杠?

Arj*_*jun 3 scala apache-spark apache-spark-sql

如何\从 spark DF 中的多列中删除属于字符串一部分的所有字符?

示例行:

11~ADX\|0.00\|ZZ\|BP\|WHT~SE\|41\|0064~GE\|0001\
Run Code Online (Sandbox Code Playgroud)

预期输出:

11~ADX|0.00|ZZ|BP|WHT~SE|41|0064~GE|0001
Run Code Online (Sandbox Code Playgroud)

Sha*_*ica 5

foldLeft在数据框中的所有列上使用,这样您就可以regexp_replace在每个单独的列上使用并返回最终的数据框。使用问题中的示例数据框(df下面称为),删除所有反斜杠

val df2 = df.columns.foldLeft(df)((df, c) => df.withColumn(c, regexp_replace(col(c), "\\\\", "")))
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下命令转义所有反斜杠

val df2 = df.columns.foldLeft(df)((df, c) => df.withColumn(c, regexp_replace(col(c), "\\\\", "\\\\\\\\")))
Run Code Online (Sandbox Code Playgroud)

如果不应使用所有列,请创建一个包含要使用的列的单独变量。要使用除一列(col下面的列)之外的所有列,请使用:

val cols = df.columns diff List("col")
cols.foldLeft ...
Run Code Online (Sandbox Code Playgroud)