我有一个csv文件,包含大约400列+100.000行。我正在尝试在hdinsight hadoop集群中运行mapreduce作业。我的mapreduce的逻辑是计算peason的相关矩阵。
map操作生成每个可能的值对以及每个键。
示例:将此作为输入:
1,2,3
4,5,6
Map器输出为:
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
您可以得出结论,Map器输出的大小更多地取决于列的数量,因此也取决于排序阶段的复杂性。这就是为什么我的mapreduce工作失败的原因。
我曾经在以前的Map器脚本中输出完整列表,如下所示:
keys pairs
0,1 1,2,4,5
0,2 1,3,4,6
1,2 2,3,5,6
但这需要完全读取文件,以便压缩它,然后压缩每对列。在本例中,如果文件足够大,则内存不足。
我考虑过如何读取列而不是行,并一直使用“yield”来优化mapper和sort中的内存使用。
有没有一种方法可以在不将文件完全加载到内存的情况下逐列(给定特定的分隔符)读取文件?
暂无答案!
目前还没有任何答案,快来回答吧!