gpt4 book ai didi

regex - 如何有条件地从 Scala 数据框中的列中的字符串中删除文本?

转载 作者:行者123 更新时间:2023-12-04 08:43:47 25 4
gpt4 key购买 nike

我目前正在探索用于 POC 的 Azure Databricks(Scala 和 Databricks 对我来说都是全新的。我正在使用这个 (Cars - Corgis) 示例数据集来展示 Databricks 的操作特性。
我的问题是我有一个名为“model”的数据框列,其中包含“2009 Audi A3”和“2005 Mercedes E550”等数据。我想要做的是更改该列,而不是前面提到的,它读作“Audi A3”或“Mercedes E550”。我有一个单独的模型年份列,因此尽可能减少列的大小。
据我所见,replaceAllIn似乎不适用于 Scala 的字符串。
到目前为止,这是我的代码:

//Use the dataframe from the previous cell and trim the model year from the model column so for example it reads as 'Audi A3' instead of '2009 Audi A3'
import scala.util.matching.Regex

val modelPrefixPatternMatch = "[0-9 ]".r
val newModel = modelPrefixPatternMatch.replaceAllIn((specificColumnsDf.select("model")),"")
但是,当我运行此代码时,我收到以下错误消息:
command-1778339999318469:5: error: overloaded method value replaceAllIn with alternatives:
(target: CharSequence,replacer: scala.util.matching.Regex.Match => String)String <and>
(target: CharSequence,replacement: String)String
cannot be applied to (org.apache.spark.sql.DataFrame, String)
val newModel = modelPrefixPatternMatch.replaceAllIn((specificColumnsDf.select("model")),"")
我也尝试过完成 SparkSQL,但也没有任何运气。
谢谢!

最佳答案

在 Spark 中,您通常会使用 withColumn 添加其他列。然后 select只有你想要的列。在这个简单的示例中,我使用 regexp_replace 函数来修剪年份,如下所示:

%scala
import org.apache.spark.sql.functions._
import org.apache.spark.sql.Column

df
.withColumn("cleanColumn", regexp_replace($"`Identification.Model Year`", "20[0-2][0-9] ","") )
.select($"`Identification.Model Year`", $"cleanColumn").distinct
.show(false)
我的结果:
My results
我们可能可以使正则表达式更紧密,例如将其绑定(bind)到列的开头或将其打开到 1980 年、1990 年等 - 这只是一个示例。
如果年份总是在开始,那么您可以使用 substring并从第 5 位开始。正则表达式方法至少可以防止出现某些记录的年份。
高温高压

关于regex - 如何有条件地从 Scala 数据框中的列中的字符串中删除文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64431833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com