【问题标题】:Custom InputFormat or InputReader for Excel files(xls)Excel 文件的自定义 InputFormat 或 InputReader (xls)
【发布时间】:2017-01-26 06:02:37
【问题描述】:

我需要读取存储在 Hadoop 集群上的 excel(xls) 文件。现在我做了一些研究,发现我需要为此创建一个 custom InputFormat。我阅读了很多文章,但从编程的角度来看,它们都没有帮助。如果有人可以帮助我编写自定义输入格式的示例代码,以便我可以了解“编程输入格式”的基础知识并可以使用 Apache POI 库来读取 excel 文件。 我制作了一个 mapreduce 程序来读取文本文件。现在我需要帮助,即使我有一些方法可以编写自己的 custom InputFormat 代码,我将在哪里编写与我已经编写的 mapreduce 程序相关的代码。

PS:- 不能将 .xls 文件转换为 .csv 文件。

【问题讨论】:

  • 如果您对此有任何解决方案,请分享。

标签: java excel hadoop mapreduce


【解决方案1】:

是的,您应该创建RecordReader 以从您的 excel 文档中读取每条记录。在该记录阅读器中,您应该使用类似 API 的 POI 来读取 excel 文档。更准确地说,请执行以下步骤:

  1. 扩展FileInputFromat并创建自己的CustomInputFrmat并覆盖getRecordReader

  2. 通过扩展RecordReader创建一个CustomRecordReader,这里你必须写下如何从给定的文件拆分生成一个键值对。 因此,首先从文件拆分中读取字节,然后使用 POI 从缓冲字节中读取所需的键和值。

这里可以查看我自己的CustomInputFormat和RecordReader来处理自定义数据对象 myCustomInputFormat

【讨论】:

  • 能否请您提一下如何读取二进制数据并将它们转换为字符串以获取 excel 中的值。
【解决方案2】:

你的研究是正确的。您需要一个适用于 Hadoop 的自定义 InputFormat。如果你幸运的话,有人已经为你的用例创建了一个。

如果没有,我建议寻找能够读取 excel 文件的 Java 库。 由于 Excel 是一种专有文件格式,因此您不太可能找到完美运行的实现。

找到能够读取 Excel 文件的库后,将其与 InputFormat 集成。

因此,您必须扩展 Hadoop 的FileInputFormat。 ExcelInputFormat 返回的 getRecordReader 必须返回 Excel 文件中的行。您可能还必须覆盖 getSplits() 方法来告诉框架根本不要拆分文件。

【讨论】:

  • 有一个名为 apache POI 的库,可以读取 excel 文件。但对我来说,问题是将它与 InputFormat 集成。在这方面有什么帮助吗??
  • 嗨,抱歉,我没有看到这个 Apache POI 库。我稍微扩展了我的答案。
猜你喜欢
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多