gpt4 book ai didi

java - 在Hadoop上实现Apriori算法

转载 作者:行者123 更新时间:2023-12-02 20:34:27 26 4
gpt4 key购买 nike

我正在尝试在使用Hadoop时实现Apriori算法。我已经实现了Apriori算法的非分布式版本,但是由于对Hadoop和MapReduce的不熟悉,引起了许多担忧。

我要实现该算法的方式分为两个阶段:

1)在第一阶段,map reduce作业将在原始交易数据集上运行。该阶段的输出是一个文件,其中包含所有1个项目集及其对1的支持。

2)在第二阶段,我想读入上一阶段的输出,然后构造新的项目集。重要的是,我想然后在映射器中确定是否在数据集中仍找到任何新的项目集。我想像一下,如果我将原始数据集作为输入发送到映射器,它将对原始文件进行分区,以便每个映射器仅扫描部分数据集。但是,候选列表需要从上一阶段的所有输出中构建。然后,这将循环循环进行固定次数的遍历。

我的问题是弄清楚如何特别确保我可以访问每个映射器中的完整项目集,以及能够访问原始数据集以计算每个阶段中的新支持。

感谢您的任何建议,评论,建议或答案。

编辑:根据反馈,我只是想更具体地询问我在这里的情况。

最佳答案

开始之前,建议您阅读Hadoop Map-Reduce Tutorial

步骤1:
将数据文件加载到HDFS。假设您的数据是txt文件,每个数据集都是一行。

a b c
a c d e
a e f
a f z
...

第2步:
按照Map-Reduce教程构建自己的Apriori类。
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
// Seprate the line into tokens by space
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
// Add the token into a writable set
... put the element into a writable set ...
}
context.write(word, one);
}

第三步:
运行mapreduce jar文件。输出将在HDFS中的文件中。
您将看到类似:
a b 3 (number of occurrence)
a b c 5
a d 2
...

根据输出文件,您可以计算关系。

On a related note, you might want to consider using a higher level abstraction than map-reduce like Cascading or Apache Spark.

关于java - 在Hadoop上实现Apriori算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51773412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com