首先,下面是来自ASM文件的示例行,其中包含类似以下内容的100-200万行:
.text:0040120F 03 CA add ecx, edx
.text:00401211 89 48 3C mov [eax+3Ch], ecx
.text:00401214 8B 0D C4 7E 58 00 mov ecx, dword_587EC4
我想计算Spark中每个文件的头(文本)和段(add,mov),以便快速处理。我读过文档/文章,但没有找到任何技术来逐行分析文件,只计算这些头文件段。在
处理后,结果应为:
^{pr2}$有没有办法只从Spark的装配文件中提取这些零件?
问题大小
假设程序集文件的每一行占用200字节的数据。 一个50MB的文件大约有250000行,用5.6分钟来处理它们,每行的处理时间是1到1.5毫秒。这是相当高的,但让我们保持它不受挑战。按照这个速度,处理136GB需要10天半的时间。在
使用Spark映射/减少
在这些假设下,map reduce似乎确实很受欢迎,希望Spark能有所帮助。我不知道您在使用哪个基础结构来运行Spark作业,所以下面的重点是处理ASM文件行的代码,并且仍然非常通用。在
首先,让我们实现从每一行单独提取信息的逻辑。在
现在我们需要从程序集文件创建一个RDD
^{pr2}$或者如果要从目录中读取所有文件:
并编写实际的map/reduce来提取行标题和ASM指令的频率:
^{4}$测试和结果
我在一个
spark-shell
中用您的示例中的三行代码测试了它:并显示输出:
这个给了
注意事项
特别的“解析”逻辑是基于我对问题陈述的理解,但是我想它需要根据您的用例进行调整。在
相关问题 更多 >
编程相关推荐