0

我正在做一个附带项目,我们想在 hadoop mapreduce 程序中处理图像(最终部署到亚马逊的弹性 mapreduce)。该过程的输入将是所有文件的列表,每个文件都附有一些额外的数据(左下角的纬度/经度位置 - 这些是航拍照片)

实际处理需要在 Python 代码中进行,因此我们可以利用 Python 图像库。我能找到的所有 Python 流示例都使用标准输入并处理文本输入。我可以通过标准输入将图像数据发送到 Python 吗?如果是这样,怎么做?

我用 Java 编写了一个 Mapper 类,它获取文件列表并将名称、额外数据和二进制内容保存到序列文件中。我在想也许我需要编写一个自定义 Java 映射器来接收序列文件并将其通过管道传输到 Python。这是正确的方法吗?如果是这样,将图像输出的 Java 和读取图像的 Python 应该是什么样子?

如果不是很明显,我对 Java 或 Python 并不是很熟悉,所以作为对这两种语言的介绍,我也有可能只是咬牙切齿而不是我能咀嚼的东西......

4

1 回答 1

0

我可以看到几种可能的方法:

  1. 使用额外数据和文件内容作为 Python 程序的输入。这里棘手的部分是编码。坦率地说,我不知道流媒体如何处理原始二进制内容,我假设基本答案是“不好”。主要问题是进程之间的标准输入/标准输出通信非常基于文本,依赖于使用制表符和换行符分隔输入,诸如此类。您需要担心图像数据的编码,并且可能需要某种预处理步骤或自定义 InputFormat,以便您可以将图像表示为文本。
  2. 仅使用额外数据和文件位置作为 Python 程序的输入。然后程序可以独立地从文件中读取实际的图像数据。这里的小问题是确保该文件可用于 python 脚本。记住这是一个分布式环境,所以文件必须在 HDFS 或类似的地方,我不知道是否有好的库可以在 python 中从 HDFS 读取文件。
  3. 自己做java-python交互。编写一个使用Runtime类来启动 python 进程本身的 java 映射器。通过这种方式,您可以完全控制这两个世界的通信方式,但显然它需要更多的代码和更多的参与。
于 2013-10-07T20:51:24.623 回答