1
我最近試圖回答question,當時我意識到我不知道如何在Spark DataFrames的正則表達式中使用反向引用。Spark DataFrame中的反向引用`regexp_replace`
例如,對於SED,我可以做
> echo 'a1
b22
333' | sed "s/\([0-9][0-9]*\)/;\1/"
a;1
b;22
;333
但隨着星火DataFrames我不能:
val df = List("a1","b22","333").toDF("str")
df.show
+---+
|str|
+---+
| a1|
|b22|
|333|
+---+
val res = df .withColumn("repBackRef",regexp_replace('str,"(\\d+)$",";\\1"))
res.show
+---+-----------+
|str|repBackRef|
+---+----------+
| a1| a;1|
|b22| b;1|
|333| ;1|
+---+----------+
只是爲了說清楚:我不想結果在這種特殊情況下,我想要一個解決方案,例如在sed
中與後向引用一樣通用。
另外,在使用regexp_extract
缺少,因爲它操作失誤時不匹配:
val res2 = df
.withColumn("repExtract",regexp_extract('str,"^([A-z])+?(\\d+)$",2))
res2.show
所以,你不得不使用一列每個圖案中提取我在說answer一樣。
謝謝!
嘗試使用'$ 1',而不是'\\ 1'。 –
是的!謝謝!我尋找這樣一個這樣簡單的語法這樣的事情,但我沒有找到它。如果你把它放在答案中,我會接受。 – Wilmerton