错误重载的方法值regexp_replace和替代方法

时间:2019-02-16 08:56:35

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

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

该列中的数据如下:

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

我尝试使用

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

但是我收到错误消息:

  

笔记本: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(“ /”)))

2 个答案:

答案 0 :(得分:2)

您需要在$函数中的列名之前使用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", "[/]", " "))

答案 1 :(得分:1)

在使用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

不需要正则表达式。