我为 reducer 编写了一个代码,该代码将读取映射器的输出。然后,它将创建一个具有键名的新文件,并且对应于同一键的所有值都将存储到一个文件中。
我的代码是:
!/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:使用分区程序
方法2:如果文件数量很少,则使用MultipleOutputs 。
关于python - 如何在Hadoop Map Reduce Framework的reducer阶段中使用唯一名称创建用户特定的文件(在Python中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38509221/