Java 对于小数据集,收集比第一次收集花费更多的时间
我将数据保存为HDFS上的单个分区(以字节为单位),当我想使用下面的代码获取数据内容时,Java 对于小数据集,收集比第一次收集花费更多的时间,java,apache-spark,hdfs,Java,Apache Spark,Hdfs,我将数据保存为HDFS上的单个分区(以字节为单位),当我想使用下面的代码获取数据内容时,收集比数据的单个分区中的第一次花费更多的时间 javarddmytext=sc.textFile(“…”); 列表行=mytext.collect(); 我希望collect和first的时间相同。然而,对于HDFS的单个分区中的数据,collect比first慢 这背后的原因可能是什么?rdd.first()不必扫描整个分区。它只得到第一个 项目并将其返回。 rdd.collect()必须扫描整个分区,收
收集
比数据的单个分区中的第一次
花费更多的时间
javarddmytext=sc.textFile(“…”);
列表行=mytext.collect();
我希望collect
和first
的时间相同。然而,对于HDFS的单个分区中的数据,collect
比first
慢
这背后的原因可能是什么?rdd.first()
不必扫描整个分区。它只得到第一个
项目并将其返回。
rdd.collect()
必须扫描整个分区,收集所有分区并发送
全部返回(序列化+反序列化成本等)
这可能是因为first()完全在驱动程序上执行
节点处于同一进程中,而收集()需要与工作进程连接
节点
通常在第一次运行操作时,大多数JVM代码都不是
优化了,类加载器还需要在
飞必须通过RPC与其他进程连接会降低第一个进程的速度
以对方付费方式执行
也就是说,如果您运行几次(在同一个驱动程序中)并且
速度仍然慢得多,您应该考虑其他因素,如网络
拥塞、工作人员的cpu/内存负载等。为什么检索第一条记录与检索所有数据需要相同的时间?因为数据非常小或很小。collect
几乎是第一条记录的3倍