【问题标题】:Hadoop: Process image files in Python codeHadoop:在 Python 代码中处理图像文件
【发布时间】:2013-10-07 19:31:43
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python hadoop mapreduce


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2019-01-17
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 2012-10-07
      • 2012-03-21
      相关资源
      最近更新 更多