我有一个 csv 文件,其中包含大约 400 列 +100.000 行。我正在尝试在 HDinsight Hadoop 集群中运行 MapReduce 作业。我的 MapReduce 的逻辑是计算 Peason 的相关矩阵。
map 操作生成每个可能的值对以及每个键。
示例: 将此作为输入:
1,2,3
4,5,6
映射器输出将是:
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”来优化映射器和排序中的内存使用。
有没有办法逐列读取文件(给定某个分隔符)而不将其完全加载到内存中?