我正在尝试练习使用mapreduce连接数据,但是当我运行这一行时
cat join1_File*.txt | ./join1_mapper.py |排序| ./join1_reducer.py
它显示此错误:
回溯(最近一次调用最后一次): 文件“./join1_mapper.py”,第 24 行,位于 value_in = key_value[1] #value 是第二项 IndexError:列表索引超出范围 4月4日 能够 13 n-01 5 15 年 12 月 能够 100 n-01 5 2月2日约3月11日 三月 03 约 8 11 2 月 22 日 演员 3 22 2 月 23 日 汉堡 5 15 08 年 3 月 汉堡 2 15
我希望输出是这样的:
4月4日 能够 13 n-01 5 15 年 12 月 能够 100 n-01 5 2月2日约3月11日 三月 03 约 8 11 2 月 22 日 演员 3 22 2 月 23 日 汉堡 5 15 08 年 3 月 汉堡 2 15
这是我的 join1_mapper.py 代码:
`for line in sys.stdin:
line = line.strip() #strip out carriage return
key_value = line.split(",") #split line, into key and value, returns a list
key_in = key_value[0].split(" ") #key is first item in list
value_in = key_value[1] #value is 2nd item
#print key_in
if len(key_in)>=2: #if this entry has <date word> in key
date = key_in[0] #now get date from key field
word = key_in[1]
value_out = date+" "+value_in #concatenate date, blank, and value_in
print( '%s\t%s' % (word, value_out) ) #print a string, tab, and string
else: #key is only <word> so just pass it through
print( '%s\t%s' % (key_in[0], value_in) ) #print a string tab and string
#注意 Hadoop 需要一个制表符来分隔键值 #但是这个程序假设输入文件有一个','分隔键值`
这是代码的更新版本,添加了错误处理。
import sys
for line in sys.stdin:
line = line.strip()
# Split the line into key and value
key_value = line.split(",")
try:
# Split the key into date and word
key_in = key_value[0].split(" ")
# Extract the value
value_in = key_value[1]
# Process the data
if len(key_in) >= 2:
date = key_in[0]
word = key_in[1]
value_out = date + " " + value_in
print('%s\t%s' % (word, value_out))
else:
print('%s\t%s' % (key_in[0], value_in))
except IndexError:
# Print information about the problematic line
print(f"Error processing line: {line}")
此修改包括一个 try-except 块,用于捕获潜在的 IndexError 异常并打印有关导致问题的行的信息。这应该可以帮助您识别和处理输入数据中有问题的行。