avro数据序列化与pythonmap-reduce

wydwbb8l  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(642)

我有avro数据进入hdfs文件系统。我想用pythonmapreduce读取avro数据。我知道如果我必须使用java,那么我们可以使用avromapper和avroreducer,但是使用python我不太确定。
这里的任何人对此或任何建议都会有很大的帮助。
提前谢谢。

s2j5cfk0

s2j5cfk01#

你可以用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

有关详细信息,请参阅pydoopavro文档。

相关问题