hadoop - 如何在hadoop mapreduce中将文件分区为较小尺寸以执行KNN

标签 hadoop mapreduce classification partitioning knn

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

这是KNN的示例。

因此,如果模型将是一个较大的文件,例如1 GB或2 GB,我们将能够将其加载到分布式缓存中。
示例:

为了预测1 otcome,我们需要找到该单个记录与模型结果中所有记录之间的距离,并找到最小距离。因此,我们需要掌握模型结果。如果文件很大,则无法将其加载到分布式缓存中以查找距离。

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

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

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

这就是我的想法。

还有没有其他办法。

任何指针都会帮助我。

最佳答案

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

假设您有一个包含一堆行的模型,并且想要找到k个与输入中的数据接近的行,那么简单的解决方案是将它们逐一进行比较。这可能会很慢,因为要经历数百万次的1-2GB数据(我假设您要分类的记录很多,否则不需要hadoop)。

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

您可以使用其他技巧来提高性能:

  • 对输入数据进行预排序,以便将来自同一分区的要比较的输入项放在一起。再次取决于您操作的数据。
  • 使用随机访问索引文件(例如Hadoop的Map文件)可以更快地找到数据并将其缓存。

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

    关于hadoop - 如何在hadoop mapreduce中将文件分区为较小尺寸以执行KNN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27957237/

    相关文章:

    date - Hive:动态分区添加到外部表

    hadoop - 当多个查询需要从数据节点访问相同的数据时会发生什么?

    sql - 表达式不在GROUP BY键中

    Hadoop MapReduce : MapTasks vs. 映射器

    time-series - 我们可以预测每个客户进行交易的日期吗?

    hadoop - HDFS上的Solr集合创建失败

    mongodb - 在 MongoDB 中分组和计数

    hadoop - map-reduce 是如何工作的……我做对了吗?

    Proximal交替线性化最小化算法的python实现

    opencv - 对于 BoW 模型中的 ORB,L2 范数比 Hamming 效果更好,为什么?