【发布时间】:2016-12-04 05:38:02
【问题描述】:
我正在使用 Flink 学习 Map-Reduce,并且有一个关于如何有效计算 DataSet 中的元素的问题。我到目前为止是这样的:
DataSet<MyClass> ds = ...;
long num = ds.count();
执行此操作时,在我的 flink 日志中显示
12/03/2016 19:47:27 DataSink (count())(1/1) 切换到 RUNNING
所以只使用了一个 CPU(我有四个和其他命令,如 reduce 全部使用)。
我认为 count() 在内部从所有四个 CPU 收集 DataSet 并按顺序对它们进行计数,而不是让每个 CPU 计算其部分然后将其相加。这是真的吗?
如果是,我怎样才能利用我所有的 CPU?首先将我的 DataSet 映射到一个 2 元组,其中包含作为第一项的原始值和作为第二项的长值 1,然后使用 SUM 函数聚合它是一个好主意吗?
例如,DataSet 将映射到 DataSet>,其中 Long 始终为 1。因此,当我对所有项目求和时,元组的第二个值的总和将是正确的计数值。
对数据集中的项目进行计数的最佳做法是什么?
问候 西蒙
【问题讨论】:
标签: java mapreduce apache-flink