Scala 如何在hadoopRDD中为每条记录分离计算和网络I/O

Scala 如何在hadoopRDD中为每条记录分离计算和网络I/O,scala,apache-spark,Scala,Apache Spark,我正在我的1节点spark群集上运行spark grep应用程序。(本身就是主人和奴隶)。我在hdfs服务器的远程源上有一个913MB的文本文件。文本文件被分成128MB的块,复制设置为“无”。我的spark应用程序读取文本文件并应用过滤器转换,搜索关键字,然后在输出到hdfs中,只输出带有该关键字的行。为了深入了解spark的工作原理,我在spark源代码中记录了更多详细信息,并构建它以运行修改后的版本。我在hadoopRDD.scala的getNext(K,V)中使用reader.getpo

我正在我的1节点spark群集上运行spark grep应用程序。(本身就是主人和奴隶)。我在hdfs服务器的远程源上有一个913MB的文本文件。文本文件被分成128MB的块,复制设置为“无”。我的spark应用程序读取文本文件并应用过滤器转换,搜索关键字,然后在输出到hdfs中,只输出带有该关键字的行。为了深入了解spark的工作原理,我在spark源代码中记录了更多详细信息,并构建它以运行修改后的版本。我在hadoopRDD.scala的getNext(K,V)中使用reader.getpos()记录了读取信息的字节,最多10条记录。我还在过滤器操作中记录一些消息,以便在计算实际启动时获取。由于spark使用延迟加载,因此在读取任何字节的数据之前,登录过滤器会显示。因此,我尝试在执行筛选操作之前读取完整的迭代器,使用:

while(iter.hasNext){
  logInfo(s"value of the iterator: ${iter.next}")
}
上述代码记录文本文件中的下一行,每次读取一条记录(此处的记录将是文本文件中的一行,作为默认的hadoop读取记录器操作)。但之后不执行任何过滤,我得到一个空输出。如果我只是在过滤操作之后打印一个日志,结果是,只有在读取了所有记录并且关闭了hadoop reader之后,它才会显示出来

我试图至少在第一组字节中将计算和网络I/O分开,以显示性能瓶颈,但我不确定spark是在每个记录上执行计算,还是在读取任务的所有记录后执行计算?如何单独计算呢?