在Spark中,如何仅对前N个频繁值进行一次热编码?

问题描述 投票:0回答:1

[在数据帧df中,我有一列my_category,其中有不同的值,可以使用以下方法查看值计数:

df.groupBy("my_category").count().show()

value   count
a    197
b    166
c    210
d      5
e      2
f      9
g      3

现在,我想在此列上应用一次热编码(OHE),但仅对顶部的N频繁值(例如N = 3)进行设置,并将所有其余的不频繁值放入虚拟列中(例如,“默认”)。例如,输出应类似于:

a  b  c  default
0  0  1  0
1  0  0  0
0  1  0  0
1  0  0  0
...
0  0  0  1
0  0  0  1
...

如何在Spark / Scala中执行此操作?

注意:我知道如何在Python中执行此操作,例如,首先为每个唯一值建立一个基于频繁度的字典,然后通过逐个检查值并将不经常出现的值放在“默认”列中来创建OHE向量。] >

[在数据框df中,我有一列my_category,其中具有不同的值,可以使用以下方法查看值计数:df.groupBy(“ my_category”)。count()。show()值计数为197 b ...

scala apache-spark apache-spark-sql one-hot-encoding
1个回答
0
投票

一个自定义函数可以写为在一个特定的列上应用一次热编码(OHE),仅用于前N个频繁值(例如N = 3)。

© www.soinside.com 2019 - 2024. All rights reserved.