pyspark将int列转换为列表类型

Emm*_*mma 3 pyspark

我的数据框有一个列num_of_items。这是一个计数字段。现在,我想将其从 int 类型转换为 list 类型。

我尝试使用array(col)甚至创建一个函数来通过将 int 值作为输入来返回列表。没用

from pyspark.sql.types import ArrayType
from array import array

def to_array(x):
    return [x]

df=df.withColumn("num_of_items", monotonically_increasing_id())
Run Code Online (Sandbox Code Playgroud)

df

col_1    | num_of_items
A        |  1
B        |  2
Run Code Online (Sandbox Code Playgroud)

预期产出

col_1    | num_of_items
A        | [23]
B        | [43]
Run Code Online (Sandbox Code Playgroud)

pau*_*ult 6

我尝试使用数组(col)

使用pyspark.sql.functions.array似乎对我有用。

from pyspark.sql.functions import array
df.withColumn("num_of_items", array("num_of_items")).show()
#+-----+------------+
#|col_1|num_of_items|
#+-----+------------+
#|    A|         [1]|
#|    B|         [2]|
#+-----+------------+
Run Code Online (Sandbox Code Playgroud)

甚至创建一个函数来通过将 int 值作为输入来返回列表。

如果您想使用您创建的函数,则必须将其设为 audf并指定返回类型:

from pyspark.sql.types import ArrayType, IntegerType
from pyspark.sql.functions import udf, col

to_array_udf = udf(to_array, ArrayType(IntegerType()))
df.withColumn("num_of_items", to_array_udf(col("num_of_items"))).show()
#+-----+------------+
#|col_1|num_of_items|
#+-----+------------+
#|    A|         [1]|
#|    B|         [2]|
#+-----+------------+
Run Code Online (Sandbox Code Playgroud)

但最好尽可能避免使用udfs:参见Spark 函数与 UDF 性能?