我有一個 Spark 資料框:
| ID | 物件 |
|---|---|
| 1 | 【太陽、太陽系、火星、銀河系】 |
| 2 | [月亮、宇宙射線、獵戶星云] |
我需要在陣列元素中用下劃線替換空格。
預期結果:
| ID | 物件 | concat_obj |
|---|---|---|
| 1 | 【太陽、太陽系、火星、銀河系】 | [太陽、太陽系、火星、銀河系] |
| 2 | [月亮、宇宙射線、獵戶星云] | [月亮,宇宙射線,獵戶星云] |
我嘗試使用regexp_replace:
df = df.withColumn('concat_obj', regexp_replace('objects', ' ', '_'))
但這將所有空格都更改為下劃線,而我只需要替換陣列元素內的空格。
那么,如何在 PySpark 中做到這一點呢?
uj5u.com熱心網友回復:
使用高階函式通過 regexp_replace 替換空格
圖式
root
|-- id: long (nullable = true)
|-- objects: array (nullable = true)
| |-- element: string (containsNull = true)
解決方案
df.withColumn('concat_obj', expr("transform(objects, x-> regexp_replace(x,' ','_'))")).show(truncate=False)
--- ------------------------------------ ------------------------------------
|id |objects |concat_obj |
--- ------------------------------------ ------------------------------------
|1 |[sun, solar system, mars, milky way]|[sun, solar_system, mars, milky_way]|
|2 |[moon, cosmic rays, orion nebula] |[moon, cosmic_rays, orion_nebula] |
--- ------------------------------------ ------------------------------------
uj5u.com熱心網友回復:
您可以使用以下正則運算式:
`(?<=[A-Za-z]) `
與您的代碼有關的唯一區別是此模式檢查空格之前是否有字母字符。
在這里試試。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486159.html
