在使用MRJob时,从字符串到整数的转换不工作



我正在编写一个简单的程序,它使用mrjob库从csv文件中映射和减少行。

一行中的一列是yearID。默认情况下,该列是作为Str读入的。我需要将其转换为Int,以便进行比较。由于某种原因,Str到Int的转换不能工作,并且有奇怪的行为。

当我运行 时,我得到以下错误:
ValueError: invalid literal for int() with base 10: 'yearID'

这个错误是由下面代码中的第29行if int(stat.get("yearID")) > 1990:引起的:

from mrjob.job import MRJob
class MRPitching(MRJob):
def mapper(self, _, line):
row = line.split(",")

playerID = row[0]

whip = {
"p_H": row[13],
"p_BB": row[16],
"p_IPOUTS": row[12],
"yearID": row[1]
}

yield playerID, whip

def reducer(self, playerID, pitchingStats):
pHSum = 0
pBBSum = 0
pIPOUTSSum = 0

for stat in pitchingStats:
if int(stat.get("yearID")) > 1990:
yield playerID, stat
if __name__ == "__main__":
MRPitching.run()

由于某种原因,int()函数将yearID作为参数,而它应该是stat.get("yearID")的值。当我打印stat.get("yearID")时,我看到的是期望值,所以我不明白为什么int()得到yearID

我忘记考虑映射数据中包含了CSV头。哦!

在添加一个检查以跳过标头后,转换按预期工作。

最新更新