将零添加到PySpark中的值

Ama*_*man 3 sql apache-spark apache-spark-sql pyspark

我有一个数据框df

val1   val2  val3
271   70    151
213   1     379
213   3     90
213   6     288
20    55    165
Run Code Online (Sandbox Code Playgroud)

我想将此数据帧转换为:

val1   val2  val3
271   70    0151
213   01    0379
213   03    0090
213   06    0288
020   55    0165
Run Code Online (Sandbox Code Playgroud)

如何在pyspark中做到这一点?并且可以通过Spark SQL做到吗?欢迎任何帮助。

use*_*411 6

对于数字类型,可以使用format_string

from pyspark.sql.functions import format_string

(sc.parallelize([(271, ), (20, ), (3, )])
    .toDF(["val"])
    .select(format_string("%03d", "val"))
    .show())
Run Code Online (Sandbox Code Playgroud)
+------------------------+
|format_string(%03d, val)|
+------------------------+
|                     271|
|                     020|
|                     003|
+------------------------+
Run Code Online (Sandbox Code Playgroud)

对于字符串lpad

from pyspark.sql.functions import lpad

(sc.parallelize([("271", ), ("20", ), ("3", )])
    .toDF(["val"])
    .select(lpad("val", 3, "0"))
    .show())
Run Code Online (Sandbox Code Playgroud)
+---------------+
|lpad(val, 3, 0)|
+---------------+
|            271|
|            020|
|            003|
+---------------+
Run Code Online (Sandbox Code Playgroud)