2015-02-12 20 views
1

我有avro數據存在hdfs文件系統。我想用python map reduce讀取這些avro數據。我知道如果我必須使用java,那麼我們可以使用AvroMapper和AvroReducer,但使用python我不太確定。Avro數據序列化與Python地圖減少

這裏的任何人已經對此工作或任何建議將是很大的幫助。

在此先感謝。

回答

0

你可以用Pydoop> = 1.0.0-rc2來做到這一點。下面是顏色怎麼算例子看起來像:

from collections import Counter 

import pydoop.mapreduce.api as api 
import pydoop.mapreduce.pipes as pp 
from pydoop.avrolib import AvroContext 

class Mapper(api.Mapper): 

    def map(self, ctx): 
     user = ctx.value 
     color = user['favorite_color'] 
     if color is not None: 
      ctx.emit(user['office'], Counter({color: 1})) 

class Reducer(api.Reducer): 

    def reduce(self, ctx): 
     s = sum(ctx.values, Counter()) 
     ctx.emit('', {'office': ctx.key, 'counts': s}) 

def __main__(): 
    factory = pp.Factory(mapper_class=Mapper, reducer_class=Reducer) 
    pp.run_task(factory, private_encoding=True, context_class=AvroContext) 

要運行該應用程序:

export STATS_SCHEMA=$(cat stats.avsc) 
pydoop submit \ 
    -D pydoop.mapreduce.avro.value.output.schema="${STATS_SCHEMA}" \ 
    --avro-input v --avro-output v \ 
    --upload-file-to-cache color_count.py --mrv2 \ 
    color_count input output 

Pydoop Avro docs瞭解詳情。