2016-12-29 3 views
-1

У меня есть dataframe df:Как добавить нули перед каждой строкой в ​​столбцах на основе некоторого условия в pyspark?

val1 val2 val3 
271 70 151 
213 1  379 
213 3  90 
213 6  288 
20 55 165 

Я хочу, чтобы преобразовать этот кадр данных, как:

val1 val2 val3 
271 70 0151 
213 01 0379 
213 03 0090 
213 06 0288 
020 55 0165 

Как я могу сделать это в pyspark? И можно ли это сделать с помощью Spark SQL? Любая помощь приветствуется.

ответ

2

Для числовых типов можно использовать format_string:

from pyspark.sql.functions import format_string 

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

Для строк lpad:

from pyspark.sql.functions import lpad 

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