我在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/