我有一个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 |
如您所见,如果它不是十进制形式,则该代码实际上有效。如何正确执行此操作?
谢谢!
答案 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|
+-----------+------------------+