为PySpark中具有二进制值的列分配值列表



我有一个pyspark数据框架,其中列Categories具有给定ID的值列表。看起来像这样,我们称之为df1:

ID  | Categories
122   [16777277, 16777350, 16777483, 16777425, 16777303]

总共大约有500个类别,但是我们可以在上面的例子中看到ID 122只有上面的5个类别。设它为df2.columns

我想把列表中的每个值从Categories列转换成它自己的列,像这样(df3):

ID  | 16777277 | 16777350 | 16777483 | 16777425 | 44444 | 55555 | ....... 
122    1            1        1           1         0       0

你知道怎么做这个转换吗?我尝试使用explode()然后pivot(),然而,这似乎不正确地将列表值映射到列。

What I tried:

df1 = df1.withColumn('exploded', F.explode('Categories'))
pivoted = df1.groupby('ID').pivot('exploded').count()

提前感谢!

在正确的轨道上,作为一个列表,爆炸,groupby和Pivot和lit(1)

df1=spark.createDataFrame([(122  , [16777277, 16777350, 16777483, 16777425, 16777303])],
('ID'  , 'Categories'))

df1.withColumn('exploded', F.explode('Categories')).groupBy("ID").pivot("exploded").agg(F.lit(1)).na.fill(0).show()
+---+--------+--------+--------+--------+--------+
| ID|16777277|16777303|16777350|16777425|16777483|
+---+--------+--------+--------+--------+--------+
|122|       1|       1|       1|       1|       1|
+---+--------+--------+--------+--------+--------+

最新更新