gpt4 book ai didi

java - 在 Spark 中计算 RDD 昂贵任务中的记录?

转载 作者:可可西里 更新时间:2023-11-01 14:12:34 24 4
gpt4 key购买 nike

在 Hadoop 中,当我使用输入格式读取器时,作业级别的日志会报告读取了多少条记录,它还会显示字节数等。

在 Spark 中,当我使用相同的输入格式读取器时,我得到的不是这些指标。

所以我想我会使用输入格式读取器来填充 rdd,然后只发布 rdd 中的记录数(rdd 的大小)。

我知道 rdd.count() 返回 rdd 的大小。

但是,我不清楚使用count() 的成本?例如:

  • 它是分布式函数吗?每个分区是否会报告其计数并汇总和报告计数?还是把整个rdd带进驱动里统计?
  • 执行 count() 后,rdd 是否仍保留在内存中,还是我必须显式缓存它?
  • 有没有更好的方法来做我想做的事情,即在对记录进行操作之前对记录进行计数?

最佳答案

Is it a distributed function? Will each partition report its count and the counts are summed and reported? Or is the entire rdd brought into the driver and counted?

计数已分发。在 spark 命名法中,count 是一个“Action”。所有的 Action 都是分布式的。实际上,只有少数几件事可以将所有数据带到驱动程序节点,而且它们通常都有很好的记录(例如获取、收集等)

After executing the count() will the rdd still remain in memory or do I have to explicitly cache it?

不,数据不会在内存中。如果你想要它,你需要在计数之前显式缓存。 Spark 的惰性评估在采取 Action 之前不会进行任何计算。除非有缓存调用,否则在 Action 之后不会将任何数据存储在内存中。

Is there a better way to do what I want to do, namely count the records before operating on them?

缓存、计数、操作似乎是一个可靠的计划

关于java - 在 Spark 中计算 RDD 昂贵任务中的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36723963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com