0

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

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

IP 列示例.

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

IP 计数频率

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

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

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

4

1 回答 1

0

我开发了超过 10 亿行的管道,这就是我要做的事情。

w = Window.partitionBy('id')

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

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

前面的答案不能很好地扩展大数据,主要是因为额外的洗牌导致连接很昂贵。

于 2020-02-29T16:22:58.217 回答