繁体   English   中英

如何在Hadoop Map Reduce Framework的reducer阶段中使用唯一名称创建用户特定的文件(在Python中)

[英]How to create user specific file with unique name in the reducer phase of Hadoop Map Reduce Framework(In Python))

我为减速器编写了一个代码,该代码将读取映射器的输出。 然后,它将创建一个具有键名的新文件,并且对应于同一键的所有值都将存储到一个文件中。

我的代码是:

!/usr/bin/env python

import sys

last_key      = None              #initialize these variables

for input_line in sys.stdin:

    input_line = input_line.strip()
    data = input_line.split("\t") 
    this_key = data[0]
    if len(data) == 2:
        value = data[1]
    else:
        value = None
    if last_key == this_key:
        if value:
            fp.write('{0}\n'.format(value))
    else:
        if last_key:
            fp.close()
            fp = open('%s.txt' %this_key,'a')
            if value:
                fp.write('{0}\n'.format(value))
        if not last_key:
            fp = open('%s.txt' %this_key,'a')
            if value:
                fp.write('{0}\n'.format(value))
        last_key = this_key     

但是它没有创建任何文件。

因此,我的问题是我需要使用什么功能来将新文件创建到HDFS中。

没有简单的解决方案可以实现此目标。您可以按照以下方法使用Mapreduce实现此目标:

方法1:使用分区程序

  1. 找出文件的唯一数量。例如,计算文件中'%this_key%'的唯一数量。
  2. 在mapreduce驱动程序[每个reducer的每个文件]中将reducer的数量设置为上一步结果。
  3. 使用分区器将映射输出发送到特定的reducer。
  4. 减速器仅发出%value%。
  5. 在工作结束时,每个文件将具有相同的键值,并且您可能会重命名reducer输出文件。

方法2:如果文件数很少,则使用MultipleOutputs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM