【问题标题】:Mapreduce POJO mappingMapreduce POJO 映射
【发布时间】:2015-09-23 03:53:51
【问题描述】:

我在 hdfs 系统中有一个文件,它是与销售数据相关的 3 个表的连接输出。 (销售标题、项目详情、投标详情)。

该文件将包含来自所有三个表的列组合。

如果有 3 个项目和 1 个标书,我将有 6 行用于交易。 所以文件中有6行具有相同的事务号。 我可以在 mapper 中阅读并创建包含所有字段的 DTO

现在我想用这个扁平的 DTO 构建复杂的 DTO 结构。 是否有任何可用的 pojo 映射框架,它是否支持从普通 DTO 到复杂结构的映射。

结构

public class PlainDTO{

String tranId;
String processDate;
String itemNumber;
String itemName;
int tenderId;
.......
......


}

从列表中,我需要转换为 下面的结构

public class ComplexDTO{

private SlsHeader slsHeader;
private Collection<SlsItems> items;
private Collection<SlsTender> tenderDetails

}

【问题讨论】:

  • 此数据的最终目的地也是弹性搜索。我打算在reducer中将复杂的dto转换为json。有没有其他好的方法可以将数据从 hadoop 转换和加载到 ES?
  • 您可以为此使用 Jackson 库
  • 每个复杂对象有多行,您最终可能会得到 2 个拆分,每个拆分都包含复杂对象的一部分。

标签: hadoop mapreduce mapping pojo


【解决方案1】:

从平面 DTO 到复杂 DTO 的转换是纯 java 的东西。一旦你写了它,它就会保持这样。从复杂的 DTO 到 json,您可以使用任何 JSON-Java 解析器,例如 Jackson 或 Gson。

挑战可能是,一旦您在 json 中拥有这种一对多映射(DTO 复杂结构),您应该了解 Elastic 搜索如何管理这些关系。我使用 Solr(类似于 Elastic Search)。他们在 Solr 中有子文档概念。

此外,如果您的 Elastic 搜索客户端是基于 Java 的,那么在更高级别上,您可以直接从平面结构转到 ES 客户端,跳过 json。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多