gpt4 book ai didi

python - 使用 python 代码没有在 mapreduce 中获得预期的输出

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:43 25 4
gpt4 key购买 nike

运行此代码以获取 Hadoop 集群中的概率,我的 CSV 文件中的数据约为 10k+。我正在使用 Google DataProc Cluster 来运行此代码。请告诉我如何获得预期的输出。最后一件事可能存在逻辑问题或功能问题。

#!/usr/bin/env python3
"""mapper.py"""
import sys

# Get input lines from stdin
for line in sys.stdin:
# Remove spaces from beginning and end of the line
line = line.strip()

# Split it into tokens
#tokens = line.split()

#Get probability_mass values
for probability_mass in line:
print("None\t{}".format(probability_mass))
#!/usr/bin/env python3
"""reducer.py"""
import sys
from collections import defaultdict


counts = defaultdict(int)

# Get input from stdin
for line in sys.stdin:
#Remove spaces from beginning and end of the line
line = line.strip()

# skip empty lines
if not line:
continue

# parse the input from mapper.py
k,v = line.split('\t', 1)
counts[v] += 1

total = sum(counts.values())
probability_mass = {k:v/total for k,v in counts.items()}
print(probability_mass)

我的 CSV 文件如下所示。

probability_mass
10
10
60
10
30
Expected output Probability of each number

{10: 0.6, 60: 0.2, 30: 0.2}

but result still show like this
{1:0} {0:0} {3:0} {6:0} {1:0} {6:0}

我会将此命令保存在 nano 中,然后运行它。

yarn jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
-D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \
-D mapred.text.key.comparator.options=-n \
-files mapper.py,reducer.py \
-mapper "python mapper.py" \
-reducer "python reducer.py" \
-input /tmp/data.csv \
-output /tmp/output

最佳答案

您将该行拆分为单个字符,这可以解释为什么您会得到 1、3、6、0 等作为映射键。

不循环,只打印该值所在的行;你的映射器不需要超过这个

import sys
for line in sys.stdin:
print("None\t{}".format(line.strip()))

然后,在化简器中,您将一个 int 除以一个较大的 int,这会导致向下舍入到最接近的 int,即 0。

您可以通过更改存储 float 的字典来解决此问题

counts = defaultdict(float)

或者将总和设置为 float

total = float(sum(counts.values()))
<小时/>

如前所述,这不是 Hadoop 问题,因为您可以在本地测试和调试它

cat data.txt | python mapper.py | sort -n | python reducer.py

关于python - 使用 python 代码没有在 mapreduce 中获得预期的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59251972/

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