2017-05-28 10 views
1

に.CSVの最初の行をスキップ、PythonのMapReduceの - 私は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' 

マッパー機能を処理するときに、csvファイルの最初の行をスキップするにはどうすればよいですか?

+0

通常、ループのない関数の最後の行として唯一のyieldを持つことは意味がありません。あなたは 'マッパ 'で何をしていますか? –

+1

@StephenRauch関数内のループ本体の最後の行である場合: – schwobaseggl

+0

@StephenRauch私はcsvファイル内のすべての行にtrip_idとtotalをマッチさせたい、csvファイルから行ごとに別のコマンド行を渡す。 python3 test.py --jobconf mapreduce.job.reduces = 1 CSTaxiTrips.csv。 mapper関数でcsvファイルを開き、next()関数を使用して最初の行をスキップする必要がありますか? – TTaa

答えて

1

'line'の内容が正確かわかりません。あなたの問題に対する簡単な答えは、フロートを除いて試してみることです。

def mapper(self, _, line): 
    datarow = line.replace(' ','').replace('N/A','').split(',') 
    trip_id = datarow[0] 
    total = datarow[14] 
    try: 
     total = np.float(total) 
    except TypeError: 
     print("skipping line with value", datarow[14]) 
    else: 
     yield ((trip_id), (total)) 
+0

行に内容(行1)trip_id taxi_id pickup_time dropoff_time ...合計 (行2)0 20117 2455.0 2013-05-05 09:45:00 50.44 (行3)1 44691 1779.0 2013-06-24 11:30:00 66.78 まだエラーが出るので、私が行を読むたびに、すべての値が文字列に変換されると思います。 – TTaa

関連する問題