我的连接映射器代码有什么问题?

问题描述 投票:0回答:1

我正在尝试练习使用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 需要一个制表符来分隔键值 #但是这个程序假设输入文件有一个','分隔键值`

list join mapreduce cloudera-quickstart-vm
1个回答
0
投票

这是代码的更新版本,添加了错误处理。

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 异常并打印有关导致问题的行的信息。这应该可以帮助您识别和处理输入数据中有问题的行。

© www.soinside.com 2019 - 2024. All rights reserved.