Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyspark:将分类列转换为二进制数组_Python_Pyspark_Azure Databricks - Fatal编程技术网

Python Pyspark:将分类列转换为二进制数组

Python Pyspark:将分类列转换为二进制数组,python,pyspark,azure-databricks,Python,Pyspark,Azure Databricks,我有一个数据帧,其中有一个列,其中每个值都是字符串,我希望对其进行转换,以使特定id的字符串的每个外观(在不同的列中表示)都可以作为适当位置的数组中的一个。例如,如果我有此数据集: category id a 1 b 1 c 1 a 2 d 2 我希望将其转化为: id result 1 [1,1,1,0] 2 [1,0,0,1] 你知道怎么做吗 编辑:我尝试使用字符串索引器,但它所

我有一个数据帧,其中有一个列,其中每个值都是字符串,我希望对其进行转换,以使特定id的字符串的每个外观(在不同的列中表示)都可以作为适当位置的数组中的一个。例如,如果我有此数据集:

category   id
a          1
b          1
c          1
a          2
d          2
我希望将其转化为:

id   result
1    [1,1,1,0]
2    [1,0,0,1]
你知道怎么做吗


编辑:我尝试使用字符串索引器,但它所做的只是在我真正想要获取数组本身时计算出现的数量。

您可以先透视并用0填充null,然后将
id
列以外的列转换为数组:

import pyspark.sql.functions as F

res = df.groupBy('id').pivot("category").agg(F.count("category")).fillna(0)
res.select("id",F.array(*[F.col(i) for i in res.columns[1:]]).alias("result")).show()

请注意,如果元素可以重复,则计数可以大于1,在这种情况下,可以添加when+,否则:

(res.select("id",F.array(*[F.when(F.col(i)>=1,1).otherwise(0) 
                       for i in res.columns[1:]]).alias("result"))).show()
(res.select("id",F.array(*[F.when(F.col(i)>=1,1).otherwise(0) 
                       for i in res.columns[1:]]).alias("result"))).show()