我有一個巨大的CSV文件,我想在Amazon EMR(python)上使用Hadoop MapReduce進行處理。在Python中使用Hadoop來處理一個大的csv文件
該文件有7個領域,但是,我只在看日期和數量場。
"date" "receiptId" "productId" "quantity" "price" "posId" "cashierId"
首先,我mapper.py
import sys
def main(argv):
line = sys.stdin.readline()
try:
while line:
list = line.split('\t')
#If date meets criteria, add quantity to express key
if int(list[0][11:13])>=17 and int(list[0][11:13])<=19:
print '%s\t%s' % ("Express", int(list[3]))
#Else, add quantity to non-express key
else:
print '%s\t%s' % ("Non-express", int(list[3]))
line = sys.stdin.readline()
except "end of file":
return None
if __name__ == "__main__":
main(sys.argv)
對於減速,我將使用流命令:集料。
問:
是我的代碼嗎?我在Amazon EMR中運行它,但是我得到了一個空輸出。
所以我最終的結果應該是:表達,XXX和非表達,YYY。在返回結果之前,我可以讓它做分割操作嗎?只是XXX/YYY的結果。我應該在哪裏放這個代碼?減速器??
此外,這是一個巨大的CSV文件,所以將映射分解成幾個分區?或者我需要顯式調用FileSplit?如果是這樣,我該怎麼做?
爲什麼不使用python內置的csv解析器? – 2012-02-14 23:18:15