我有一个包含大约400列+100.000行的csv文件。 我试图在HDinsight Hadoop集群中运行MapReduce作业。 我的MapReduce的逻辑是计算Peason的相关矩阵。
map操作会生成每个可能的值对以及每个键。
示例: 鉴于此输入:
1,2,3
4,5,6
Mapper输出为:
keys pairs
0,1 1,2
0,2 1,3
1,2 2,3
0,1 4,5
0,2 4,6
1,2 5,6
您可以得出结论,映射器输出的大小更多地取决于列数,因此排序阶段的复杂性。我认为为什么我的mapreduce工作失败了。
我曾经在以前的映射器脚本中输出完整列表,如下所示:
keys pairs
0,1 1,2,4,5
0,2 1,3,4,6
1,2 2,3,5,6
但是这需要对文件进行完整的读取才能将其压缩然后压缩每对列。在这种情况下,如果文件足够大,我的内存不足。
我虽然想要阅读专栏而不是专栏而继续使用" yield"优化映射器和排序中的内存使用情况。
有没有办法逐列读取文件(给定某个分隔符)而不将其完全加载到内存中?