我在文本文件中有大量数据(1,000,000行)。每行有128列。
现在我正在尝试用这个大数据构建一个kd树。我想使用map reduce进行计算。
我的问题的蛮力方法:
1)编写一个map reduce作业来查找每列的方差,并选择方差最大的列
2)取(列名,方差值)作为输入写入另一个映射reduce作业,将输入数据分成2部分。 1部分的所有行的值小于给定列名称的输入值,第二部分的所有行都大于输入值。
3)对于每个部分重复步骤1和步骤2,继续该过程,直到每个部分留下500个值。
列名称,方差值构成了我的树的单个节点。因此,对于高度为10的树的蛮力方法,我需要运行1024个地图减少作业。
我的问题:
1)有没有什么办法可以通过少量的地图减少工作来提高效率?
2)我每次都在阅读相同的数据。我有什么办法可以避免这种情况吗?
3)是否有其他框架如猪,蜂巢等对这类任务有效?
4)我可以使用哪些框架将数据保存到数据存储中并轻松检索数据?
请求帮助......
答案 0 :(得分:2)
为什么不尝试在这里使用Apache Spark(https://spark.apache.org/)?...这似乎是火花的完美用例
答案 1 :(得分:1)
对于树的每个节点的MR作业,您有O(n)= 2 ^ n个作业数(其中n是树的高度),这对YARN的开销不利。但是通过简单的编程技巧,您可以将其降低到O(n)= n。 以下是一些想法: