You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编写Hadoop MapReduce时reducer行拆分异常问题求助

问题根因及修复方案

1. 核心错误:制表符转义字符写错

你代码中的line.split('/t', 1)使用了正斜杠+字母t,对应普通的/t字符串,并非制表符的转义字符。Python中制表符的正确转义写法为反斜杠+字母t,也就是\t。
由于拆分失败,item列表只会保留1个元素(即整行内容),后续执行person,connections = item变量解包操作时,就会触发值数量不匹配的报错。

2. 兼容优化建议

为了避免mapper输出脏行导致程序崩溃,以及提升运行效率,可做两处优化:

  • 拆分后先校验item长度,不符合要求的行直接跳过
  • connections拆分结果提前存储,无需重复拆分三次
item = line.split('\t', 1)
# 新增长度校验
if len(item) != 2:
    continue
person, connections = item
# 提前存储拆分结果避免重复计算
conn_parts = connections.split(":", 1)

3. 修复后完整reducer代码

#!/usr/bin/python3.6
import sys

for line in sys.stdin:
    line = line.strip()
    # 把原来的'/t'修正为'\t'
    item = line.split('\t', 1)
    if len(item) != 2:
        continue
    person, connections = item
    output = person + ":"
    conn_parts = connections.split(":", 1)
    if len(conn_parts[0]) > 0:
        output += f"Might({conn_parts[0]})"
    if len(conn_parts) > 1 and len(conn_parts[1]) > 0:
        output += f" Probably({conn_parts[1]})"
    print(output)

内容的提问来源于stack exchange,提问作者Feverish123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:39:03