【问题标题】:How to map values with a key to a column in a Spark DataFrame如何将带有键的值映射到 Spark DataFrame 中的列
【发布时间】:2018-04-02 17:52:11
【问题描述】:

我正在使用 Scala 在 Spark 2.3 中进行一些特征工程。

我在 Spark DataFrame 的一列中有 IP 地址,看起来像

.

然后我使用data.groupBy("ip").count() 获取每个 IP 地址的频率列表。这看起来像

现在我想将每个频率映射到原始数据帧。我会在哪里

ip  | freq |
--  |      |
123 | 3    |
567 | 7    |
857 | 10   |
123 | 3    |

解决此类问题的有效方法是什么?

【问题讨论】:

  • 左加入原件
  • 哇!我一直在努力,但失败了,所以请看。非常感谢
  • 所以你整理对了吗?
  • 我做了 data.join(freq_map, Seq("ip"), joinType="outer")) 并且工作得很好!
  • 很高兴听到这个消息:)

标签: scala apache-spark hadoop feature-engineering


【解决方案1】:

我开发了超过 10 亿行的流水线,这就是我要做的事情。

w = Window.partitionBy('id')

df.withColumn('freq', F.count('id').over(w) ).show()

这更简单,可读性好,最重要的是高效。它不聚合数据,因此无需创建两个 df 对象并加入。

之前的答案不适用于大数据,主要是因为额外的 shuffle 导致连接成本很高。

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    相关资源
    最近更新 更多