PySpark-如何根据条件将0的字符串前缀连接到另一个字符串列

时间:2018-09-28 07:04:52

标签: pyspark pyspark-sql

我有一个DataFrame,看起来像下面的

|string_code|prefix_string_code|
|1234       |001234            |
|123        |000123            |
|56789      |056789            |

基本上我想要添加必要的'0',以使列prefix_string_code的长度为6

我尝试过的事情:

df.withColumn('prefix_string_code', when(length(col('string_code')) < 6, concat(lit('0' * (6 - length(col('string_code')))), col('string_code'))).otherwise(col('string_code')))

它不起作用,而是产生了以下内容:

|string_code|prefix_string_code|
|1234       |0.001234          |
|123        |0.000123          |
|56789      |0.056789          |

如您所见,如果它不是十进制形式,则该代码实际上有效。如何正确执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:2)

在这种情况下,您可以使用lpad功能

>>> import pyspark.sql.functions as F

>>> rdd = sc.parallelize([1234,123,56789,1234567])
>>> data = rdd.map(lambda x: Row(x))
>>> df=spark.createDataFrame(data,['string_code'])
>>> df.show()
+-----------+
|string_code|
+-----------+
|       1234|
|        123|
|      56789|
|    1234567|
+-----------+

>>> df.withColumn('prefix_string_code', F.when(F.length(df['string_code']) < 6 ,F.lpad(df['string_code'],6,'0')).otherwise(df['string_code'])).show()
+-----------+------------------+
|string_code|prefix_string_code|
+-----------+------------------+
|       1234|            001234|
|        123|            000123|
|      56789|            056789|
|    1234567|           1234567|
+-----------+------------------+