【问题标题】:How to label encode for a column in spark scala?如何为 spark scala 中的列标记编码?
【发布时间】:2021-05-05 00:30:58
【问题描述】:

我有一个非常大的数据框,例如:

    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 个。记录数超过 1700 万。

【问题讨论】:

    标签: scala dataframe apache-spark user-defined-functions rdd


    【解决方案1】:

    您可以使用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|
    +---+---+---+---+---+---+
    

    【讨论】:

      猜你喜欢
      • 2017-02-09
      • 2017-10-24
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      相关资源
      最近更新 更多