首页 > 解决方案 > 在 PySpark 中使用爆炸函数之前,是否可以将字符串类型列更改为数组类型列?

问题描述

我想知道是否可以将字符串类型的“数据”列更改为数组类型,但数字之间使用逗号。

#+----------+---------------------+------------+
#|date      |month                |data        |
#+----------+---------------------+------------+
#|2015      |08                   |01001111    |
#|2016      |06                   |011111101   |
#|2017      |02                   |0101011100  |
#|2018      |11                   |01101111    |
#+----------+---------------------+------------+

我需要下一个:

#+----------+---------------------+------------------------+
#|date      |month                |data                    |
#+----------+---------------------+------------------------+
#|2015      |08                   | [0,1,0,0,1,1,1,1]      |
#|2016      |06                   | [0,1,1,1,1,1,1,0,1]    |
#|2017      |02                   | [0,1,0,1,0,1,1,1,0,0]  |
#|2018      |11                   | [0,1,1,0,1,1,1,1]      |
#+----------+---------------------+------------------------+

我需要这个改变的原因是因为我必须使用poseexplode函数,它适用于数组。

提前致谢。

标签: pyspark-sql

解决方案


是的,使用自定义函数(UDF):

df = df.withColumn("data", F.udf(lambda x: x.split(','))('data'))

推荐阅读