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文件。
对此有何感想!
其实很简单。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