Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何用同一数据帧中其他列的实际列值替换一列中的字符串值?_Scala_Apache Spark_Dataframe_Apache Spark Sql - Fatal编程技术网

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       |
+-------+---+----------+--------------------+