我在hadoop中使用join函数在python中加入列表,但是我发现它与在一台机器中使用join不同,任何人都遇到了这个问题。
代码是

def reducer():
    (last_key,last_index,list) = ("","","")
    for line in sys.stdin:
        line = line.strip()
        fields = line.split("\t")
        if len(fields) < 3:
            continue
            cur_key = fields[0]
            cur_index = fields[1]
            cur_list = fields[2]
            if last_key !="" and last_key!=cur_key:
                print "%s\t%s\t%s" %(last_key,last_index,list)
                list = ""
            elif last_index !="" and last_index!=cur_index:
                print "%s\t%s\t%s" %(last_key,last_index,list)
                list = ""
            last_key = cur_key
            last_index = cur_index
            if list != "":
                list = '_'.join(cur_list)
            else:
                list = cur_list
     print "%s\t%s\t%s" %(last_key,last_index,list)

我使用连接代替“+”,因为它更有效。但是在hadoop和一台机器上运行时结果不同,如何解决。

映射器输出为
键\ tpos \ t0000000000594720
密钥\ tpos \ t0000000000870960
cat mapper | sort | python reducer.py结果是key \ tpos \ tt0000000000594720_0000000000870960正确
但是在hadoop中,结果是0_0_0_0_0_0_0_0_0_0_8_7_0_9_6_0,真奇怪。
Hadoop无法支持联接功能吗?

最佳答案

我猜问题是因为您如何称呼加入-

list = '_'.join(cur_list)

这将加入列表cur_list,每个元素之间都有一个_。因此,根据您的代码,您将获得正确的结果。

如果您不想在cur_list的字符串之间插入任何内容,请使用空字符串连接-
list = ''.join(cur_list)

关于python - python join函数的用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32089197/

10-14 14:46
查看更多