错误重载方法值 regexp_replace 与替代品
Posted
技术标签:
【中文标题】错误重载方法值 regexp_replace 与替代品【英文标题】:error overloaded method value regexp_replace with alternatives 【发布时间】: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("/")))
【问题讨论】:
【参考方案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以上是关于错误重载方法值 regexp_replace 与替代品的主要内容,如果未能解决你的问题,请参考以下文章
在 Hive 中,如何使用“regexp_replace()”对标记值执行通配符搜索,以将其替换为公共值?