Pyspark 创建字符串类型的测试数据

Pyspark create testing data with string type

我正在尝试创建测试数据框,其中一列为 Int 类型,一列为 String 类型。输出类似于下面。我认为对于 Int 我们可以使用

data = spark.range(1, 5)
output = dataset.withColumnRenamed('id','myid')

我们如何处理该字符串列?非常感谢您的帮助!

预期输出:

      id.     ordernum
       1       0032
       2       0033
       3       0034
       4       0035
       5       0036

您可以从列表的列表创建 Spark 数据框。这是一个例子:

data = [[i, '%04d' % (i+31)] for i in range(1,6)]
# [[1, '0032'], [2, '0033'], [3, '0034'], [4, '0035'], [5, '0036']]

df = spark.createDataFrame(data, ['id', 'ordernum'])
df.show()
+---+--------+
| id|ordernum|
+---+--------+
|  1|    0032|
|  2|    0033|
|  3|    0034|
|  4|    0035|
|  5|    0036|
+---+--------+

如果您更喜欢 Spark 范围,可以使用 format_string:

import pyspark.sql.functions as F
df = spark.range(1, 6).withColumn(
    'ordernum',
    F.format_string('%04d', F.col('id') + 31)
)

df.show()
+---+--------+
| id|ordernum|
+---+--------+
|  1|    0032|
|  2|    0033|
|  3|    0034|
|  4|    0035|
|  5|    0036|
+---+--------+

您可以使用 lpad 函数从 id + 31 列创建 ordernum 列,左侧用 0 填充以获得 4 位数字的字符串编号:

from pyspark.sql import functions as F

output = spark.range(1, 6).withColumn("ordernum", F.lpad(col("id") + 31, 4, '0'))

output.show()
#+---+--------+
#| id|ordernum|
#+---+--------+
#|  1|    0032|
#|  2|    0033|
#|  3|    0034|
#|  4|    0035|
#|  5|    0036|
#+---+--------+