我的DataFrame有一个列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())df
col_1 | num_of_items
A | 1
B | 2预期产出
col_1 | num_of_items
A | [23]
B | [43]发布于 2019-01-07 22:29:27
我试过使用数组
使用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]|
#+-----+------------+甚至创建一个函数,以int值作为输入返回列表。
如果要使用所创建的函数,则必须将其设置为udf并指定返回类型:
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]|
#+-----+------------+但最好尽可能避免使用udf:参见Spark functions vs UDF performance?
https://stackoverflow.com/questions/54082626
复制相似问题