在 PySpark 中将值列表分配给具有二进制值的列

Assign list of values to columns with binary value in 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() 但是,这似乎错误地将列表值映射到列。

我尝试了什么:

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

提前致谢!

在正确的轨道上,作为一个列表,explode, groupby 和 Pivot and 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|
+---+--------+--------+--------+--------+--------+