在Hadoop中,当我使用inputformat reader时,作业级别的日志会报告读取的记录数,还会显示字节数等。
在Spark中,当我使用相同的输入格式读取器时,我没有使用这些指标。
所以我想我会使用inputformat reader来填充rdd,然后只发布rdd中的记录数(rdd的大小)。
我知道rdd.count()
会返回rdd的大小。
然而,使用count()
的费用对我来说并不清楚?例如:
count()
后,rdd仍然会留在内存中还是我必须显式缓存它?答案 0 :(得分:13)
它是分布式功能吗?每个分区都会报告其计数 并计算和报告计数?或者整个rdd带来了 进入司机并计算?
计数已分发。在火花命名法中,计数是一种“行动”。所有行动都是分发的。实际上,只有少数东西可以将所有数据带到驱动程序节点,并且它们通常都有很好的文档记录(例如,采集,收集等)
执行count()后,rdd仍会保留在内存中或执行 我必须明确缓存它吗?
不,数据不会在内存中。如果你想要它,你需要在计数之前显式缓存。在采取Action之前,Spark的懒惰评估不会进行任何计算。除非有缓存调用,否则在Action之后没有数据存储在内存中。
有没有更好的方法来做我想做的事情,即计算 在对它们进行操作之前的记录?
缓存,计数,操作似乎是一个可靠的计划