1
這造成我的示例數據幀:火花數據幀更新列,而其他科拉姆是像pyspark
df = sc.parallelize([('abc',),('def',)]).toDF() #(
df = df.selectExpr("_1 as one",)
df = df.withColumn("two", lit('z'))
df.show()
看起來像這樣:
+---+---+
|one|two|
+---+---+
|abc| z|
|def| z|
+---+---+
現在我想要做的是一系列SQL where like
聲明其中列two
被追加,無論它是否匹配
在「僞代碼」中,它看起來像這樣:
for letter in ['a','b','c','d']:
df = df['two'].where(col('one').like("%{}%".format(letter))) += letter
最終導致DF看起來像這樣:
+---+----+
|one| two|
+---+----+
|abc|zabc|
|def| zd|
+---+----+
'expr'用'regexp_replace'可能是一個更好的選擇性能明智的。在2.1+中,您可以使用[''regexp_replace' alone](https://github.com/apache/spark/blob/v2.1.0/sql/core/src/main/scala/org/apache/spark/sql/ functions.scala#L2324) – zero323
謝謝@ zero323! – mtoto
是有效的答案,但對於我正在處理的應用程序來說,這是不切實際的。對不起,我沒有指定。我收到了超過1000萬個文件(在'one'中)和一個嵌套的「詞典」,其中有超過500萬個關鍵詞,我想匹配它們,並將結果放在'two'中。正則表達式是我的第一種方法,但「喜歡」和「進入」的速度更快,所以我試圖找到一種解決方案。 – Thagor