【问题标题】:error overloaded method value regexp_replace with alternatives错误重载方法值 regexp_replace 与替代品
【发布时间】:2019-07-10 07:29:32
【问题描述】:

我正在尝试将数据帧 df_test 中名为 UserAgent 的列中的数据中的“/”字符替换为空格(“”)

列中的数据如下所示:

Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) 像 Gecko

我尝试过使用

val df_test =spark.sql(s"select UserAgent from df_header_pivot")
 df_test.withColumn("UserAgent", regexp_replace("UserAgent", "[/]", ""))

但我收到错误消息:

notebook:4: 错误:用替代方法重载了方法值 regexp_replace: (e:org.apache.spark.sql.Column,模式:org.apache.spark.sql.Column,替换:org.apache.spark.sql.Column)org.apache.spark.sql.Column (e: org.apache.spark.sql.Column,pattern: String,replacement: String)org.apache.spark.sql.Column 不能应用于(org.apache.spark.sql.ColumnName, org.apache.spark.sql.Column) df_test.withColumn("UserAgent", regexp_replace($"UserAgent" , lit("/")))

【问题讨论】:

    标签: regex scala apache-spark-sql databricks regexp-replace


    【解决方案1】:

    您需要在regexp_replace 函数中的列名前使用$ 符号。 import org.apache.spark.sql.functions._ val df_test =spark.sql(s"select UserAgent from df_header_pivot") df_test.withColumn("UserAgent", regexp_replace($"UserAgent", "[/]", " "))

    【讨论】:

    • 很好的答案维杰!
    【解决方案2】:

    当您使用 SparkSQL 时,您可以简单地在 SQL 本身中调用 replace 函数,例如:

    val df_test =spark.sql(s"select replace(UserAgent, '/', '') AS UserAgent from tmp")
    
    df_test.show
    

    也可以使用translate 函数替换不需要正则表达式的字符,例如

    df_test
      .withColumn("UserAgent", translate($"UserAgent", "/", ""))
      .show
    

    不需要正则表达式。

    【讨论】:

    • 嘿 wBob,在 scala/python 中也可以吗?
    • 嘿@VijayKumarSharma,通过更新使用translate 函数检查我的答案。 HTH
    猜你喜欢
    • 1970-01-01
    • 2016-11-02
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多