【发布时间】:2019-03-18 11:15:02
【问题描述】:
我正在尝试将子字符串 '$NUMBER' 替换为每行的“数字”列中的值。
我试过了
from pyspark.sql.functions import udf
from pyspark.sql.Types import StringType
replace_udf = udf(
lambda long_text, number: long_text.replace("$NUMBER", number),
StringType()
)
df = df.withColumn('long_text',replace_udf(col('long_text'),col('number')))
和
from pyspark.sql.functions import expr
df = df.withColumn('long_text',expr("regexp_replace(long_text, '$NUMBER', number)"))
但没有任何效果。我无法弄清楚另一列如何替代子字符串。
示例:
df1 = spark.createDataFrame(
[
("hahaha the $NUMBER is good",3),
("i dont know about $NUMBER",2),
("what is $NUMBER doing?",5),\
("ajajaj $NUMBER",2),
("$NUMBER dwarfs",1)
],
["long_text","number"]
)
输入:
+---------------------------------+------+
| long_text . |number|
+---------------------------------+------+
|hahaha the $NUMBER is good | 3|
| what is $NUMBER doing? | 5|
| ajajaj $NUMBER | 2|
+---------------------------------+------+
预期输出:
+--------------------+------+
| long_text|number|
+--------------------+------+
|hahaha the 3 is good| 3|
| what is 5 doing?| 5|
| ajajaj 123| 2|
+--------------------+------+
答案未涵盖列替换的类似问题: Spark column string replace when present in other column (row)
【问题讨论】:
-
你能提供一个示例输入和预期输出吗?
-
$是正则表达式中的一个特殊符号,表示在字符串末尾匹配。您需要用斜线对其进行转义:\$NUMBER
标签: regex apache-spark replace pyspark