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

使用MRJob时字符串转整数失败问题求助

问题分析与解决

错误原因很明确:你的CSV文件第一行是表头(包含'yearID'这个字段名),但代码没有跳过这一行,导致mapper把表头行也当成数据行处理,生成了一个yearID值为字符串'yearID'的字典,传到reducer后执行int('yearID')时触发ValueError。

解决方法

在mapper函数开头添加判断,跳过表头行即可。因为你的CSV第一列是playerID,表头行的第一列就是这个字符串,所以可以通过这个条件判断:

修改后的mapper代码:

def mapper(self, _, line):
    row = line.split(",")
    
    # 跳过CSV表头行
    if row[0] == 'playerID':
        return
    
    playerID = row[0]
    
    whip = {
        "p_H": row[13],
        "p_BB": row[16],
        "p_IPOUTS": row[12],
        "yearID": row[1]
    }
    
    yield playerID, whip

额外建议

  • 若CSV存在换行或格式不规范的情况,可以用Python内置的csv模块来读取行,比直接split(",")更可靠,能自动处理带引号的逗号等特殊情况。
  • 在转换yearID为整数时,可以添加异常捕获,避免因数据格式错误导致程序崩溃,比如:
try:
    year = int(stat.get("yearID"))
except ValueError:
    continue  # 跳过格式错误的行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:31:04