GAE mapreduce:为作业定义参数



我正在摆弄GAE mapreduce,有一个问题:

是否有可能在mapreduce中仅为某个作业更改变量?

我问的原因是:

我的mapreduce作业的输入csv和输出csv应该具有相同的标题行-然而,标题行在输出csv的某个地方,但从来没有在顶部。为了获得正确的标题行,我在reduce函数中插入了一个计数器,该计数器检查reduce作业的当前迭代,如果它为0,它将把硬编码的标题行传递给管道。当输出csv存储在blobstore中时,计数器将被重置。

问题:计数器通常会随机重置自己,可能是因为我必须在函数外将其定义为全局变量"reduce_counter = 0"。

是否有任何方法将变量/参数链到作业,或者是否有更好的方法来获取header_row?

我不认为我可以与DictReader或csv模块工作,因为输出存储在blobstore和blobstore对象不能被改变,据我所知。

您可以在main.py文档的www.github.com/jvdheyden/ste中找到我的代码。

谢谢!

应该在mapreduce作业完成后添加标题。可以通过在任务完成后访问输出CSV来实现:

orig_file = gcs.open(filename_from_mapreduce)
new_file = gcs.open(filename_from_mapreduce + "_with_headers", "r")
new_file.write("your,csv,headers,here")
while True:
   read = orig_file.read()
   if read == '':
      break
   output.write(read)
output.close()
gcs.delete(orig_file)

你的问题发生是因为GAE在多个分片中处理mapreduce任务。美妙之处在于,这些小任务中的每一个都是并行执行的,这在处理大量数据时为我们提供了巨大的时间优势。

这也解释了为什么你的CSV头出现在随机的地方,而每个分片只是在完成工作时写入它的输出。因此,您无法可靠地预测谁将写出输出的第一行。

相关内容

  • 没有找到相关文章

最新更新