0

我有一个 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”来优化映射器和排序中的内存使用。

有没有办法逐列读取文件(给定某个分隔符)而不将其完全加载到内存中?

4

0 回答 0