Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hadoop处理非结构化数据+;地图还原_Java_Hadoop_Mapreduce - Fatal编程技术网

Java 使用Hadoop处理非结构化数据+;地图还原

Java 使用Hadoop处理非结构化数据+;地图还原,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我想使用hadoop来处理非结构化的CSV文件。这些文件是非结构化的,因为它们包含来自不同类型、不同行长的多个数据值。此外,有数百个这样的文件,它们的大小通常相对较大(>200Mb) 每个文件的结构如下所示: Book , ISBN , BookName , Authors , Edition Book , 978-1934356081, Programming Ruby 1.9 , Dave Tho

我想使用hadoop来处理非结构化的CSV文件。这些文件是非结构化的,因为它们包含来自不同类型、不同行长的多个数据值。此外,有数百个这样的文件,它们的大小通常相对较大(>200Mb)

每个文件的结构如下所示:

Book     , ISBN          , BookName                     , Authors    , Edition
Book     , 978-1934356081, Programming Ruby 1.9         , Dave Thomas, 1
Book     , 978-0596158101, Programming Python           , Mark Lutz  , 4
...
BookPrice, ISBN          , Store                        , Price
BookPrice, 978-1934356081, amazon.com                   , 30.0
BookPrice, 978-1934356081, barnesandnoble.com           , 30.67
BookPrice, 978-0596158101, amazon.com                   , 39.55
BookPrice, 978-0596158101, barnesandnoble.com           , 44.66
...
Book     , ISBN          , BookName                     , Authors    , Edition
Book     , 978-1449311520, Hadoop - The Definitive Guide, Tom White  , 3
...
这些文件是自动生成的,我无法控制给定的结构。基本上,有一个标题行,后面是包含与标题匹配的值的数据行。行的类型可以通过第一个逗号分隔的单词来标识。因此,从示例中可以看出,
Book
行包含有关书籍的元数据(名称、isbn、作者、版本),而
BookPrice
包含不同销售点/供应商的书籍的各种价格

我试图理解如何使用Map/Reduce对数据执行一些聚合计算。数据的结构化方式使得理解每个阶段要提取的
key->value
对变得更加困难

例如,我想计算每本书的平均最大最小价格(可以按ISBN合并/分组)。我意识到我可以做一些预处理,将数据提取到有序的、一种类型的CSV文件中,并从中开始工作(使用grep、python、awk等),但这将破坏使用M/R+Hadoop的意义,并且需要大量额外的工作

我曾想过使用多个映射阶段,但我对所有这些都相当陌生,不确定如何/从何开始


如何为示例文件/查询实现这样的M/R作业(Java)?谢谢。

我遇到了类似的情况,并做了以下设计:
我已经开发了使用OpenCSV解析器实际分割记录的输入格式。然后 我将MapWritable填充为一个值。每个映射包含一条带有“字段名->字段值”条目的记录
在您的情况下,我将使用类似枚举器的键,其中包含记录类型,如“价格记录”、“作者记录”等。

然后在mapper中,您可以编写相对简单的代码来识别感兴趣的记录并将其聚合


更复杂但更有益的方法是为配置单元创建SerDe,它将文件映射到结构表中:记录类型(如上所述)和KeyValueMap列。(列的配置单元支持映射类型)。然后您就可以针对半结构化数据创建SQL。

非常酷的方法,谢谢。你介意分享一些实际的实现细节/代码吗?David,你是如何将头从文件中分离出来的?通常我编写输入格式,它派生自TextInputFormat,对第一个字符串进行特殊处理