【问题标题】:How to replace string values in one column with actual column values from other columns in the same dataframe?如何用同一数据框中其他列的实际列值替换一列中的字符串值?
【发布时间】:2019-10-03 05:14:03
【问题描述】:

我在一列中有一些字符串值,我想用其他列中的值替换该列中的子字符串,并将所有加号替换为空格(如下所示)。

我有这些 List[String] 映射,它们是动态传递的,mapFrommapTo 应该在索引中关联。

描述值:mapFrom: ["Child Name", "Child Age", "Child State"]

列名:mapTo: ["name", "age", "state"]

输入示例:

name, age, state, description
tiffany, 10, virginia, Child Name + Child Age + Child State
andrew, 11, california, Child State + Child Name + Child Age
tyler, 12, ohio, Child Age + Child State + Child Name

预期结果:

name, age, state, description
tiffany, 10, virginia, tiffany 10 virginia
andrew, 11, california, california andrew 11
tyler, 12, ohio, 12 ohio tyler

如何使用 Spark Scala 实现这一目标?

【问题讨论】:

    标签: scala apache-spark dataframe apache-spark-sql


    【解决方案1】:

    您想使用regexp_replace 将子字符串替换为另一列中的值。

    首先,压缩两个列表(这里我将+到空格的更改添加到两个lsits中,但可以单独完成):

    val mapFrom = List("Child Name", "Child Age", "Child State") :+ " \\+ "
    val mapTo = List("name", "age", "state").map(col) :+ lit(" ")
    val mapToFrom = mapFrom.zip(mapTo)
    

    假设输入数据框df,将所有子字符串替换为其各自的值,如下所示:

    val df2 = mapToFrom.foldLeft(df){case (df, (from, to)) => 
      df.withColumn("description", regexp_replace($"description", lit(from), to))
    }
    

    使用提供的输入数据,结果符合预期:

    +-------+---+----------+--------------------+
    |name   |age|state     |description         |
    +-------+---+----------+--------------------+
    |tiffany|10 |virginia  |tiffany 10 virginia |
    |andrew |11 |california|california andrew 11|
    |tyler  |12 |ohio      |12 ohio tyler       |
    +-------+---+----------+--------------------+
    

    【讨论】:

    • 有没有办法处理具有相似字符串的字段?例如,from("AGE", "AGENT"), to("age", "agent_name")
    • @Tiffany 我不太确定与上述问题有什么区别。您可以在有更多解释空间的地方创建一个新问题,然后在此处发布链接,以便我查看。 :)
    • 嘿@Shaido,我发布了一个新问题!感谢您的帮助:) stackoverflow.com/questions/57359585/…
    • @Tiffany:没问题,我为新问题添加了答案。这似乎是由于使用了“Child”,它是其他描述(ChildAge 和 ChildState)的子序列。
    猜你喜欢
    • 2019-12-13
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    相关资源
    最近更新 更多