2015-02-12 5 views
1

У меня есть данные avro, присутствующие в файловой системе hdfs. Я хочу прочитать эти данные avro, используя сокращение карты python. Я знаю, что если мне нужно использовать 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 для деталей.

Смежные вопросы