首页 > 解决方案 > 一个热编码复合字段

问题描述

我想使用OneHotEncoder. 我创建了一个复合字段并尝试OneHotEncoder在其上使用如下:(项目 1-3 来自同一个项目列表)

import pyspark.sql.functions as F

df = df.withColumn("basket", myConcat("item1", "item2", "item3")) 
indexer = StringIndexer(inputCol="basket", outputCol="basketIndex")
indexed = indexer.fit(df).transform(df)
encoder = OneHotEncoder(setInputCol="basketIndex", setOutputCol="basketVec")

encoded = encoder.transform(indexed)

def myConcat(*cols):
    return F.concat(*[F.coalesce(c, F.lit("*")) for c in cols])

我收到内存不足错误

这种方法有效吗?如何使用同一列表中的分类值对复合字段或多列进行热编码?

标签: apache-sparkpysparkone-hot-encodingmultivalue

解决方案


如果您有分类值数组,为什么不尝试 CountVectorizer:

import pyspark.sql.functions as F
from pyspark.ml.feature import CountVectorizer

df = df.withColumn("basket", myConcat("item1", "item2", "item3")) 
indexer = CountVectorizer(inputCol="basket", outputCol="basketIndex")
indexed = indexer.fit(df).transform(df)

推荐阅读