如何将 groupBy().count() 添加到源 DataFrame?

用户8131063

我有以下数据框:

+---------------+--------------+--------------+-----+
|        column0|       column1|       column2|label|
+---------------+--------------+--------------+-----+
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|
+---------------+--------------+--------------+-----+

我想应用 groupBy 并依靠它并得出以下结果:

+--------------+--------------+-----+
|       column1|       column2|count|
+--------------+--------------+-----+
|10.0.0.2.54880| 10.0.0.3.5001|   19|
| 10.0.0.3.5001|10.0.0.2.54880|   10|
+--------------+--------------+-----+

我知道我必须使用这个:

dataFrame_Train.groupBy("column1", "column2").count().show()

但是问题是我需要将“计数”列作为永久列添​​加到我的数据框中。在上述情况下,如果我dataFrame_Train.show()在 之后使用groupBy,我会看到没有“计数”列的第一个数据帧。这段代码:

dataFrame_Train.groupBy("column1", "column2").count().show()
`dataFrame_Train.show()`

你能帮我添加groupBy("column1", "column2").count()到数据框吗?(因为我将来需要使用“计数”列来训练数据)谢谢。

杰克·拉斯科夫斯基

@eliasah 的回答很好,但可能不是最有效的、代码和性能方面的。

窗口聚合函数(又名窗口聚合)

每当您看到需要groupByand 时join,尤其是。对于像这样的简单用例,请考虑窗口聚合函数

之间的主要区别groupBy和窗口聚集之处在于前者给你最多的行数在源数据集,而后者(窗口集合体)为您提供准确的行数与源数据集。这似乎完全符合您的要求,不是吗?

有了这个,让我们看看代码。

import org.apache.spark.sql.expressions.Window
val columns1and2 = Window.partitionBy("column1", "column2") // <-- matches groupBy

import org.apache.spark.sql.functions._
// using count aggregate function over entire partition frame
val counts = ips.withColumn("count", count($"label") over columns1and2)
scala> counts.show
+---------------+--------------+--------------+-----+-----+
|        column0|       column1|       column2|label|count|
+---------------+--------------+--------------+-----+-----+
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604900|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604899|10.0.0.2.54880| 10.0.0.3.5001|    2|   13|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|    7|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|    7|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|    7|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|    7|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|    7|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|    7|
|05:49:56.604908| 10.0.0.3.5001|10.0.0.2.54880|    2|    7|
+---------------+--------------+--------------+-----+-----+

完毕!干净又方便。这就是我心爱的窗口聚合函数!

性能比较

有趣的来了。这和@eliasah 的解决方案之间的区别只是纯粹的语法吗?我不这么认为(但我仍在学习如何得出正确的结论)。查看执行计划并自行判断。

下面是窗口聚合的执行计划。

在此处输入图片说明

然而,以下是执行计划groupByjoin(我不得不把两个截图的计划是太大的一个包括)。

在此处输入图片说明 在此处输入图片说明

Job-wisegroupByjoinquery 轻松击败了窗口聚合,前者有 2 个 Spark 作业,后者有 5 个。

操作员方面,它们的数量和最重要的交换(它们是 Spark SQL 的 shuffle),窗口聚合可能已经击败groupByjoin.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将总计行添加到pandas DataFrame groupby

来自分类Dev

熊猫,如何将Series添加到DataFrame列,其中系列索引与DataFrame列匹配?

来自分类Dev

如何将Pandas DataFrame groupby结果转换为DataFrame?

来自分类Dev

如何将行ID的持久列添加到Spark DataFrame?

来自分类Dev

引导CSS和熊猫DataFrame.to_html。如何将类添加到<thead>?

来自分类Dev

如何将pandas.Dataframe添加到以test_data创建的文件中?

来自分类Dev

熊猫:如何将列表作为元素添加到DataFrame中的单个单元格

来自分类Dev

如何将新元素添加到列表中的 pandas.DataFrame 列?

来自分类Dev

Pandas DataFrame GroupBy sum/count to new DataFrame

来自分类Dev

将图像添加到熊猫DataFrame

来自分类Dev

将源添加到JitPack工件

来自分类Dev

熊猫将列添加到groupby数据框

来自分类Dev

将列添加到datettime驱动的Groupby函数

来自分类Dev

将groupby添加到现有数据框

来自分类Dev

R使用groupby将行添加到数据框

来自分类Dev

将列添加到 groupby 数据框

来自分类Dev

如何将另一个DataFrame中的值添加到与列匹配的行上?

来自分类Dev

如何将DataGridViewComboBoxCell添加到绑定的DataGridView数据源(以编程方式)

来自分类Dev

如何将软件包添加到netbeans的其他测试源中

来自分类Dev

如何将软件包添加到netbeans的其他测试源中

来自分类Dev

谁能解释我如何将数据源添加到报告簿的“部分”?

来自分类Dev

如何将标头添加到从源Pod到目标Pod的每个请求中?

来自分类Dev

如何将多个行源添加到MSForms列表框

来自分类Dev

如何将条件添加到数据透视表以显示部分或操纵的源数据

来自分类Dev

如何将mysql数据源添加到applicationContext.xml

来自分类Dev

如何将.fadeIn()添加到来自外部源的错误消息中

来自分类Dev

将count作为属性添加到javascript对象

来自分类Dev

将COUNT的值添加到现有值

来自分类Dev

将SQL COUNT()结果添加到列值

Related 相关文章

  1. 1

    将总计行添加到pandas DataFrame groupby

  2. 2

    熊猫,如何将Series添加到DataFrame列,其中系列索引与DataFrame列匹配?

  3. 3

    如何将Pandas DataFrame groupby结果转换为DataFrame?

  4. 4

    如何将行ID的持久列添加到Spark DataFrame?

  5. 5

    引导CSS和熊猫DataFrame.to_html。如何将类添加到<thead>?

  6. 6

    如何将pandas.Dataframe添加到以test_data创建的文件中?

  7. 7

    熊猫:如何将列表作为元素添加到DataFrame中的单个单元格

  8. 8

    如何将新元素添加到列表中的 pandas.DataFrame 列?

  9. 9

    Pandas DataFrame GroupBy sum/count to new DataFrame

  10. 10

    将图像添加到熊猫DataFrame

  11. 11

    将源添加到JitPack工件

  12. 12

    熊猫将列添加到groupby数据框

  13. 13

    将列添加到datettime驱动的Groupby函数

  14. 14

    将groupby添加到现有数据框

  15. 15

    R使用groupby将行添加到数据框

  16. 16

    将列添加到 groupby 数据框

  17. 17

    如何将另一个DataFrame中的值添加到与列匹配的行上?

  18. 18

    如何将DataGridViewComboBoxCell添加到绑定的DataGridView数据源(以编程方式)

  19. 19

    如何将软件包添加到netbeans的其他测试源中

  20. 20

    如何将软件包添加到netbeans的其他测试源中

  21. 21

    谁能解释我如何将数据源添加到报告簿的“部分”?

  22. 22

    如何将标头添加到从源Pod到目标Pod的每个请求中?

  23. 23

    如何将多个行源添加到MSForms列表框

  24. 24

    如何将条件添加到数据透视表以显示部分或操纵的源数据

  25. 25

    如何将mysql数据源添加到applicationContext.xml

  26. 26

    如何将.fadeIn()添加到来自外部源的错误消息中

  27. 27

    将count作为属性添加到javascript对象

  28. 28

    将COUNT的值添加到现有值

  29. 29

    将SQL COUNT()结果添加到列值

热门标签

归档