首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将int列转换为列表类型pyspark

将int列转换为列表类型pyspark
EN

Stack Overflow用户
提问于 2019-01-07 22:14:51
回答 1查看 6.5K关注 0票数 3

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

我尝试使用array(col),甚至创建一个函数,以int值作为输入返回列表。不起作用

代码语言:javascript
复制
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

代码语言:javascript
复制
col_1    | num_of_items
A        |  1
B        |  2

预期产出

代码语言:javascript
复制
col_1    | num_of_items
A        | [23]
B        | [43]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-07 22:29:27

我试过使用数组

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

代码语言:javascript
复制
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并指定返回类型:

代码语言:javascript
复制
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?

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54082626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档