(1) 00781 應該是 -> 781
(2) 00001 應該是 -> 1
(3) 00000 應該是 -> 0 (對于這種特殊情況只有一個 0)
(4) 10101 應該是 -> 10101 (不變)
到目前為止我所擁有的是
from pyspark.sql import functions as F
df = df.withColumn('ID',F.regexp_replace('ID', r'^[0]*',''))
但這并不完全正確,因為它不適用于 00000 -> 0 情況
uj5u.com熱心網友回復:
from pyspark.sql.functions import col
from pyspark.sql.types import IntegerType
df = spark.createDataFrame([('01001',),('00056',),('00000',),('10101',)],['id'])
df.withColumn('new_id',col('id').cast(IntegerType())).show()
----- ------
| id|new_id|
----- ------
|01001| 1001|
|00056| 56|
|00000| 0|
|10101| 10101|
----- ------
uj5u.com熱心網友回復:
我發現它更容易regexp_extract,盡管幾乎可以肯定有一種方法可以regexp_replace.
df.withColumn('id2', f.regexp_extract(f.col('ID'), '^0*(([^0].*)|0$)', 1)).show()
----- -----
| ID| id2|
----- -----
|00781| 781|
|00001| 1|
|00000| 0|
|10101|10101|
----- -----
該正則運算式僅針對從第一個非0
或最后一個0(如果只有0s)開始的子字串。
結果是
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436860.html
標籤:阿帕奇火花 pyspark apache-spark-sql
