gpt4 book ai didi

python - 从 Hadoop mapreduce 作业打开 HDFS 上的文件

转载 作者:可可西里 更新时间:2023-11-01 14:23:04 29 4
gpt4 key购买 nike

通常,我可以用这样的东西打开一个新文件:

aDict = {}
with open('WordLists/positive_words.txt', 'r') as f:
aDict['positive'] = {line.strip() for line in f}

with open('WordLists/negative_words.txt', 'r') as f:
aDict['negative'] = {line.strip() for line in f}

这将打开 WordLists 文件夹中的两个相关文本文件,并将每一行作为正面或负面附加到词典中。

但是,当我想在 Hadoop 中运行 mapreduce 作业时,我认为这行不通。我正在这样运行我的程序:

./hadoop/bin/hadoop jar contrib/streaming/hadoop-streaming-1.1.2.jar -D mapred.reduce.tasks=0 -file hadoop_map.py -mapper hadoop_reduce.py -input /toBeProcessed -output /Completed

我试图将代码更改为:

with open('/mapreduce/WordLists/negative_words.txt', 'r')

其中 mapreduce 是 HDFS 上的一个文件夹,WordLists 是一个包含否定词的子文件夹。但是我的程序没有找到这个。我正在做的事情是否可行?如果可行,在 HDFS 上加载文件的正确方法是什么。

编辑

我已经尝试过:

with open('hdfs://localhost:9000/mapreduce/WordLists/negative_words.txt', 'r')

这似乎做了一些事情,但现在我得到了这样的输出:

13/08/27 21:18:50 INFO streaming.StreamJob:  map 0%  reduce 0%
13/08/27 21:18:50 INFO streaming.StreamJob: map 50% reduce 0%
13/08/27 21:18:50 INFO streaming.StreamJob: map 0% reduce 0%

然后作业失败。所以还是不对。有什么想法吗?

编辑 2:

重新阅读 API 后,我注意到我可以在终端中使用 -files 选项来指定文件。 API 声明:

The -files option creates a symlink in the current working directory of the tasks that points to the local copy of the file.

In this example, Hadoop automatically creates a symlink named testfile.txt in the current working directory of the tasks. This symlink points to the local copy of testfile.txt.

-files hdfs://host:fs_port/user/testfile.txt

因此,我运行:

./hadoop/bin/hadoop jar contrib/streaming/hadoop-streaming-1.1.2.jar -D mapred.reduce.tasks=0 -files hdfs://localhost:54310/mapreduce/SentimentWordLists/positive_words.txt#positive_words -files hdfs://localhost:54310/mapreduce/SentimentWordLists/negative_words.txt#negative_words -file hadoop_map.py -mapper hadoop_map.py -input /toBeProcessed -output /Completed

根据我对 API 的理解,这会创建符号链接(symbolic link),因此我可以在我的代码中使用“positive_words”和“negative_words”,如下所示:

with open('negative_words.txt', 'r')

但是,这仍然不起作用。任何人都可以提供的任何帮助将不胜感激,因为在我解决这个问题之前我无能为力。

编辑 3:

我可以使用这个命令:

-file ~/Twitter/SentimentWordLists/positive_words.txt

连同我运行 Hadoop 作业的命令的其余部分。这会在我的本地系统而不是 HDFS 上找到文件。这不会抛出任何错误,因此它在某处被接受为一个文件。但是,我不知道如何访问该文件。

最佳答案

大量评论后的解决方案:)

在 python 中读取数据文件:使用 -file 发送它并在脚本中添加以下内容:

import sys

有时需要在import之后添加:

sys.path.append('.')

(与@DrDee 在 Hadoop Streaming - Unable to find file error 中的评论相关)

关于python - 从 Hadoop mapreduce 作业打开 HDFS 上的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474519/

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