在 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|
+---+--------+--------+--------+--------+--------+
我有一个 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|
+---+--------+--------+--------+--------+--------+