当前位置: 首页 > 知识库问答 >
问题:

MapReduce-使用hadoop配置对象读取文本文件

房唯
2023-03-14
1. 0 0.64 0.64 0 0.32
2. 0.21 0.28 0.5 0 0.14
3. 0.06 0 0.71 0 1.23 
4. 1.03 1.36 0.32 0.51 0
5. 0 0 0 0 0.63

...行号不在文件中。每一行都是一个5维向量,并表示k-means算法的初始聚类质心。这里我们有5个初始集群。

接下来,我们有一个必须分配给集群的数据点文件,称为data.txt,如下所示:

1. 0 0.64 0.64 0 0.32
2. 0.21 0.28 0.5 0 0.14
3. 0.06 0 0.71 0 1.23
4. 0 0 0 0 0.63 
5. 0 0 0 0 0.63 
6. ... 
... 

这里的...表示我们有很多行数据点(对于这个问题,~10000)。同样,每一行都是一个5维向量。

这都有点让人摸不着头脑。我在main()或run()函数中创建hadoop配置对象吗?我在main函数中set()然后在map函数中调用get(),还是在run函数中set()?它使我不得不在for循环中运行映射和reduce函数n次,每次都使用一个新的/更新的centroids.txt文件。

对此有何感想!

共有1个答案

司允晨
2023-03-14

其实很简单。Hadoop映射器具有#setup方法,在开始时调用该方法来配置映射器。您要做的是在此方法中读取Centroids.txt文件:

class MyMapper extends Mapper {

    double[][] centroids = new double[5][];

    public void setup(Configuration conf) {
         InputStream is = FileSystem.get(conf).open(new Path("centroids.txt"));
         // read centroid values
    }
}

如果您不想在映射器代码中硬编码文件路径,可以在提交作业之前将其传递给配置对象:

conf.set("centroids.path", "centroids.txt");

然后在mapper中读取

InputStream is = FileSystem.get(conf).open(new Path(conf.get("centroids.path")));
 类似资料:
  • 我正在使用java学习hadoop mapreduce,我有一个示例文件,数据如下所示,我如何跳过处理这个文件中的标题行…因为当我看到映射器输入时,它也在考虑标题… 滚动noschool namenameageGenderclasssubjectmarks

  • 问题内容: 我如何阅读像android app中的文本文件: 所以我可以返回一个字符串,如: 我想到的是(伪代码): 问题答案: 试试这个

  • 问题内容: 我在使用BufferedReader时遇到问题 我想打印一个文本文件的6行: 现在,从每次调用readLine()方法可以收集到的信息开始,它都会自动前进到下一行。 所以我不能使用条件br.readLine()!= null,因为它已经将其前进了一行,并且我得到了输出: 我使用什么条件来检查文本字段中是否还有新行。 提前致谢! 问题答案: 这就是问题: 您有两次调用-第一个 仅 检查是

  • 问题内容: 我需要在终端中传递一个文本文件,然后从中读取数据,我该怎么办? 如何从终端进入路径,如何在另一侧阅读? 问题答案: 您将要使用数组访问命令行参数以获取文件名,并使用FileSystem模块(fs)来读取文件。例如: 为了稍微分解一下,通常长度为2,第零个为“节点”解释器,第一个为节点当前正在运行的脚本,其后的项目在命令行中传递。从argv中提取文件名后,就可以使用文件系统函数读取文件并

  • 我想打印一个文本文件的6行: 现在,根据我每次调用readLine()方法时所收集到的信息,它会自动前进到下一行。 所以我不能使用条件br.readline()!=null,因为它已经提前了一行,我得到的输出是: 我使用什么条件来检查文本字段中是否还有新行。 提前道谢!

  • 问题 怎样读取普通.ini格式的配置文件? 解决方案 configparser 模块能被用来读取配置文件。例如,假设你有如下的配置文件: ; config.ini ; Sample configuration file [installation] library=%(prefix)s/lib include=%(prefix)s/include bin=%(prefix)s/bin prefi