在Spark中计算RDD昂贵任务中的记录?
在Hadoop中,当我使用inputformat reader时,作业级别的日志会报告读取的记录数,还会显示字节数等。
在Spark中,当我使用相同的inputformat阅读器时,我得到的不是那些指标。
所以我想我会使用inputformat reader来填充rdd,然后只发布rdd中的记录数(rdd的大小)。
我知道rdd.count()
返回rdd的大小。
但是,使用count()
的成本对我来说并不清楚? 例如:
- 它是分布式function吗? 每个分区是否会报告其计数并将计数汇总并报告? 或整个rdd被带入驱动程序并计算?
- 执行
count()
,rdd仍会保留在内存中还是我必须显式缓存它? - 有没有更好的方法来做我想做的事情,即在对它们进行操作之前对记录进行计数?
它是分布式function吗? 每个分区是否会报告其计数并将计数汇总并报告? 或整个rdd被带入驱动程序并计算?
伯爵分发。 在火花命名法中,计数是一种“行动”。 所有行动都是分发的。 实际上,只有极少数东西可以将所有数据带到驱动程序节点,并且它们通常都有很好的文档记录(例如,接收,收集等)
执行count()后,rdd仍会保留在内存中还是我必须显式缓存它?
不,数据不会在内存中。 如果你想要它,你需要在计数之前显式缓存。 在采取Action之前,Spark的延迟评估不会进行任何计算。 除非有缓存调用,否则在Action之后不会将数据存储在内存中。
有没有更好的方法来做我想做的事情,即在对它们进行操作之前对记录进行计数?
缓存,计数,操作似乎是一个可靠的计划
- 线程主java.lang.exceptionininitializerError中的exception当没有hadoop安装spark时
- Bluemix Spark与Java
- 使用Mongo-Hadoop连接器通过Apache Spark更新MongoDb中的集合
- 与csv文件相比,将mysql表转换为spark数据集的速度非常慢
- Spark – 任务不可序列化:如何使用调用外部类/对象的复杂映射闭包?
- 在Apache spark中,使用mapPartitions和组合使用广播变量和map之间的区别是什么
- 如何在GroupBy操作后从spark DataFrame列中收集字符串列表?
- 将JavaRDD转换为DataFrame时出现Spark错误:java.util.Arrays $ ArrayList不是数组模式的有效外部类型
- 基于第二个Dataframe的DataFrame过滤