如何将文件分区为较小的大小,以便在hadoop mapreduce中执行KNN

时间:2015-01-15 05:17:42

标签: hadoop mapreduce classification partitioning knn

在类似KNN的算法中,我们需要将模型数据加载到缓存中以预测记录。

这是KNN的例子。

enter image description here

因此,如果模型是一个大文件say1或2 GB,我们将能够将它们加载到分布式缓存中。 示例: enter image description here 为了预测1结果,我们需要找到单个记录与模型结果中所有记录之间的差异并找到最小距离。所以我们需要掌握模型结果。如果是大文件,则无法将其加载到分布式缓存中以查找距离。

一种方法是将模型Result拆分/分区为一些文件,并对该文件中的所有记录执行距离计算,然后找到classlabel的最小值和最大值,并预测结果。

我们如何分割文件并对这些分区执行操作?

ie  1 record <Distance> file1,file2,....filen
     2nd record <Distance> file1,file2,...filen

这就是我的想法。

还有什么办法吗?

任何指针都会对我有帮助。

1 个答案:

答案 0 :(得分:0)

我认为您对数据进行分区的方式主要取决于您的数据本身。

由于您拥有一组包含多行的模型,而您希望找到k关闭输入数据的模型,因此通过逐个比较它们来解决这些问题。这可能很慢,因为数百万次传输1-2GB数据(我假设你有大量的记录要分类,否则你不需要hadoop)。

这就是为什么你需要有效地修剪你的模型(你的分区),这样你才能比较那些最有可能最接近的行。这是一个难题,需要了解您所操作的数据。

可用于消除性能的其他技巧包括:

  • 对输入数据进行预排序,以便将从同一分区进行比较的输入项汇集在一起​​。再次取决于您操作的数据。
  • 使用随机访问索引文件(如Hadoop&#39; Map文件)更快地查找数据并对其进行缓存。

最后,您的模型实际上可能更容易存储在lucene索引中,因此您可以通过查找索引来实现分区的效果。预先对数据进行排序仍然有用。