Scala 如何用同一数据帧中其他列的实际列值替换一列中的字符串值?
我在一列中有一些字符串值,我想用其他列中的值替换该列中的子字符串,并用空格替换所有加号(如下所示) 我有这些Scala 如何用同一数据帧中其他列的实际列值替换一列中的字符串值?,scala,apache-spark,dataframe,apache-spark-sql,Scala,Apache Spark,Dataframe,Apache Spark Sql,我在一列中有一些字符串值,我想用其他列中的值替换该列中的子字符串,并用空格替换所有加号(如下所示) 我有这些List[String]映射,它们是在mapFrom和mapTo应该在索引中关联的地方动态传递的 描述值:mapFrom:[“儿童姓名”、“儿童年龄”、“儿童状态”] 列名:mapTo:[“姓名”、“年龄”、“状态”] 输入示例: name, age, state, description tiffany, 10, virginia, Child Name + Child Age + Ch
List[String]
映射,它们是在mapFrom
和mapTo
应该在索引中关联的地方动态传递的
描述值:mapFrom:[“儿童姓名”、“儿童年龄”、“儿童状态”]
列名:mapTo:[“姓名”、“年龄”、“状态”]
输入示例:
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实现这一点?您希望使用另一列中的值替换子字符串
首先,压缩这两个列表(这里我将从+
到空格的更改添加到两个LSIT中,但可以单独完成):
假设输入数据帧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 |
+-------+---+----------+--------------------+
有没有一种方法可以从具有类似字符串的字段中进行处理?例如,从(“年龄”、“代理人”)到(“年龄”、“代理人姓名”)@Tiffany,我不确定与上述问题的区别。你可以在有更多解释空间的地方创建一个新问题,然后在这里发布一个链接,这样我就可以看一看了。:)嘿@Shaido,我发布了一个新问题!谢谢你的帮助:)@Tiffany:没问题,我为新问题添加了答案。这似乎是由于使用了“Child”,这是其他描述(ChildAge和ChildState)的子序列。
+-------+---+----------+--------------------+
|name |age|state |description |
+-------+---+----------+--------------------+
|tiffany|10 |virginia |tiffany 10 virginia |
|andrew |11 |california|california andrew 11|
|tyler |12 |ohio |12 ohio tyler |
+-------+---+----------+--------------------+