代码之家  ›  专栏  ›  技术社区  ›  Arjun

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

  •  3
  • Arjun  · 技术社区  · 7 年前

    我怎么能把所有的 \ 是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 回复  |  直到 7 年前
        1
  •  2
  •   Shaido MadHadders    7 年前

    使用 foldLeft 在dataframe中的所有列上,以这种方式可以使用 regexp_replace 在每个单独的列上并返回最终数据帧。使用问题中的示例数据帧(调用 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 ...