如何在 spark scala 中标记列的编码?
How to label encode for a column in spark scala?
我有一个非常大的数据框,例如:
A B
a_1 b_1
a_2 b_2
a_3 b_3
a_1 b_4
a_2 b_4
a_2 b_2
我想创建对应于 B 的每个唯一值的列,如果 A 的每个唯一值都存在,则将其值设置为 1。预期结果应如下所示
A B C_b_1 C_b_2 C_b_3 C_b_4
a_1 b_1 1 0 0 1
a_2 b_2 0 1 0 1
a_3 b_3 0 0 1 0
a_1 b_4 1 0 0 1
a_2 b_4 0 1 0 1
a_2 b_2 0 1 0 1
解释: 对于 a_1 B 的不同值是 {b_1, b_4} 因此对应于它们的列是设置为 1。对于 a_2,B 的不同值是 {b_2,b_4},因此这些列是 1。对于 a_3.
也是如此
数据非常庞大,预计 'A' 有大约 37000 个不同的值,而 'B' 有大约 370 个。记录数超过 17万.
您可以使用 df.stat.crosstab
,并使用 A
列将其连接回原始数据框:
df.join(df.stat.crosstab("A","B").withColumnRenamed("A_B", "A"), "A").show
+---+---+---+---+---+---+
| A| B|b_1|b_2|b_3|b_4|
+---+---+---+---+---+---+
|a_3|b_3| 0| 0| 1| 0|
|a_2|b_2| 0| 2| 0| 1|
|a_2|b_4| 0| 2| 0| 1|
|a_2|b_2| 0| 2| 0| 1|
|a_1|b_4| 1| 0| 0| 1|
|a_1|b_1| 1| 0| 0| 1|
+---+---+---+---+---+---+
我有一个非常大的数据框,例如:
A B
a_1 b_1
a_2 b_2
a_3 b_3
a_1 b_4
a_2 b_4
a_2 b_2
我想创建对应于 B 的每个唯一值的列,如果 A 的每个唯一值都存在,则将其值设置为 1。预期结果应如下所示
A B C_b_1 C_b_2 C_b_3 C_b_4
a_1 b_1 1 0 0 1
a_2 b_2 0 1 0 1
a_3 b_3 0 0 1 0
a_1 b_4 1 0 0 1
a_2 b_4 0 1 0 1
a_2 b_2 0 1 0 1
解释: 对于 a_1 B 的不同值是 {b_1, b_4} 因此对应于它们的列是设置为 1。对于 a_2,B 的不同值是 {b_2,b_4},因此这些列是 1。对于 a_3.
也是如此数据非常庞大,预计 'A' 有大约 37000 个不同的值,而 'B' 有大约 370 个。记录数超过 17万.
您可以使用 df.stat.crosstab
,并使用 A
列将其连接回原始数据框:
df.join(df.stat.crosstab("A","B").withColumnRenamed("A_B", "A"), "A").show
+---+---+---+---+---+---+
| A| B|b_1|b_2|b_3|b_4|
+---+---+---+---+---+---+
|a_3|b_3| 0| 0| 1| 0|
|a_2|b_2| 0| 2| 0| 1|
|a_2|b_4| 0| 2| 0| 1|
|a_2|b_2| 0| 2| 0| 1|
|a_1|b_4| 1| 0| 0| 1|
|a_1|b_1| 1| 0| 0| 1|
+---+---+---+---+---+---+