python按列读取文件而不加载到内存中?

时间:2017-04-07 10:55:20

标签: python csv hadoop hdinsight pearson

我有一个包含大约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"优化映射器和排序中的内存使用情况。

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

0 个答案:

没有答案