【问题标题】:Prepend zeros to a value in PySpark将零添加到 PySpark 中的值
【发布时间】:2017-05-13 11:06:12
【问题描述】:

我有一个数据框df

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 来做到这一点?欢迎任何帮助。

【问题讨论】:

    标签: sql apache-spark pyspark apache-spark-sql


    【解决方案1】:

    对于数字类型,您可以使用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|
    +---------------+
    

    【讨论】:

      【解决方案2】:
      from pyspark.sql.functions import col, format_string
      
      df = spark.createDataFrame([('123',),('1234',)],['number',])
      
      df = df.withColumn('number_padded', format_string("%012d", col('number').cast('int')))
      
      df.show()
      
      number number_padded
      123 000000000123
      1234 000000001234

      【讨论】:

      • 如果您能添加评论以帮助我们理解您的代码,那就太好了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-21
      • 2018-11-09
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多