【发布时间】:2017-05-28 21:17:49
【问题描述】:
我正在尝试在 python 中做 mapreduce,我的 csv 文件如下所示,
trip_id taxi_id pickup_time dropoff_time ... total
0 20117 2455.0 2013-05-05 09:45:00 50.44
1 44691 1779.0 2013-06-24 11:30:00 66.78
我的代码是,
import pandas as pd
import numpy as np
from mrjob.job import MRJob
class MRCount(MRJob):
def mapper(self, _, line):
datarow = line.replace(' ','').replace('N/A','').split(',')
trip_id = datarow[0]
total = datarow[14]
total = np.float(total)
yield ((trip_id), (total))
由于我的代码将所有行都传递给映射器,所以它以字符串行(索引)开头,但我想玩总浮点数,所以当我运行文件时,它会出错
TypeError: float() argument must be a string or a number, not 'generator'
处理mapper函数时如何跳过csv文件的第一行?
【问题讨论】:
-
一般来说,将唯一的 yield 作为没有循环的函数的最后一行是没有意义的。你在用
mapper做什么? -
@StephenRauch 如果它是函数内循环体的最后一行怎么办:)
-
@StephenRauch 我想在csv文件的每一行中匹配trip_id和total,我有另一个命令行从csv文件中逐行传递,python3 test.py --jobconf mapreduce.job.reduces =1 CSTaxiTrips.csv。我是否必须在映射器函数中打开 csv 文件并使用 next() 函数跳过第一行?
标签: python csv hadoop mapreduce mrjob