我需要将文件作为一个单元读取和处理,而不是逐行读取,而且您不清楚在Hadoop MapReduce应用程序中如何执行此操作。我需要做的是将文件的第一行作为标题读取,我可以将它用作我的键,以及将以下行作为数据来构建2-D数据数组,我可以将其用作我的值。然后,我会对整个二维数据数组(即值)做一些分析。如何使用Hadoop MapReduce处理一个二维数组,每个文件一个?
下面是我打算解决这个问题的方法,如果这看起来不合理或者有更好的方法可以解决这个问题,我将非常感激评论(这是我第一个认真的MapReduce应用程序,所以我“M可能使新秀错误):
我的文本文件输入包含与车站的信息(姓名,纬度/经度,ID等),然后一个或多个含有一个年份值以上线一条线(即,1956年)加上由空格分隔的12个月值(即0.3 2.8 4.7 ...)。我必须对整个每月数值[number_of_years] [12]进行处理,因此每条线都是孤立无意义的。
创建自定义键类,使其实现WritableComparable。这将保存来自输入文本文件起始行的标题信息。
创建一个自定义输入格式类,其中a)isSplitable()方法返回false,并且b)getRecordReader()方法返回一个自定义记录读取器,该读取器知道如何读取文件拆分并将其转换为我的自定义键和值类。
创建一个映射器类,它对输入值(每月值的二维数组)进行分析并输出原始键(站标题信息)和输出值(一个二维分析数组值)。只有一个包装减速器类,因为没有真正的减少要完成。
目前尚不清楚,这是地图的良好/正确应用减少方法一)因为我映射到一个键的单一值(数据阵列)做分析,和b),因为每个密钥永远不会超过单个值(数据数组),那么不需要执行真正的减少。另一个问题是我正在处理的文件相对较小,远远小于默认的64MB分割大小。在这种情况下,第一个任务可能是将输入文件整合到一个序列文件中,如定义性Hadoop O'Reilly书中的SmallFilesToSequenceFileConverter示例所示(第2版,第194页)?
在此先感谢您的意见和/或建议!