Python 大数据文件:读取和创建结构化文件
我有一个20+GB的数据集,其结构如下:Python 大数据文件:读取和创建结构化文件,python,c++,file-io,dataset,bigdata,Python,C++,File Io,Dataset,Bigdata,我有一个20+GB的数据集,其结构如下: 1 3 1 2 2 3 1 4 2 1 3 4 4 2 (注意:重复是有意的,两列中没有固有的顺序。) 我想用以下格式构造一个文件: 1: 2, 3, 4 2: 3, 1 3: 4 4: 2 这是我的问题;我试着在Python和C++中编写脚本来加载文件,创建长字符串,并逐行写入文件。然而,这两种语言似乎都无法处理手头的任务。有人对如何解决这个问题有什么建议吗?具体而言,是否有一种特定的方法/程序最适合于此?任何帮助或指导都将不胜感
1 3
1 2
2 3
1 4
2 1
3 4
4 2
(注意:重复是有意的,两列中没有固有的顺序。)
我想用以下格式构造一个文件:
1: 2, 3, 4
2: 3, 1
3: 4
4: 2
这是我的问题;我试着在Python和C++中编写脚本来加载文件,创建长字符串,并逐行写入文件。然而,这两种语言似乎都无法处理手头的任务。有人对如何解决这个问题有什么建议吗?具体而言,是否有一种特定的方法/程序最适合于此?任何帮助或指导都将不胜感激。您可以使用Hadoop尝试此功能。您可以运行独立的Map Reduce程序。映射器将第一列作为键输出,第二列作为值输出。具有相同键的所有输出将进入一个减速器。因此,您有一个键和一个带有该键的值列表。您可以运行values列表并输出(key,valueString),这是您想要的最终输出。您可以从一个简单的hadoop教程开始,并按照我的建议使用mapper和reducer。但是,我还没有尝试在独立的hadoop系统上扩展20GB的数据。你可以试试。希望这有帮助。您是否尝试过使用
std::vector
的std::vector
外部向量表示每一行。外部向量中的每个槽都是一个向量,包含每行的所有可能值。这假设行#可以用作向量的索引
否则,您可以尝试std::map
,其中键是行号,向量包含该行的所有值
的std::list
也可以
你的程序是否内存不足
编辑1:处理大型数据文件您可以将问题当作合并排序来处理。
为每个行号打开一个文件。 将第二列值附加到文件中。 读取所有数据后,关闭所有文件。 打开每个文件,读取值并打印出来,逗号分隔
还发现了一个有趣的想法 如果您想持久保存一个大型词典,那么基本上您需要查看一个数据库 按照这里的建议,使用Python的sqlite3模块写入主键自动递增的表,其中包含一个名为“key”(或“left”)的字段和一个名为“value”(或“right”)的字段 然后从表中选择最小值(键)和最大值(键),利用这些信息,您可以按排序顺序选择具有相同“键”(或“左”)值的所有行,并将这些信息打印到输出文件(如果数据库对您来说不是一个好的输出)
我编写这种方法时假设您将这个问题称为“大数据”,因为键的数量不适合内存(否则,一个简单的Python字典就足够了)。然而,这个问题并没有被正确地标记为“大数据”:为了在Hadoop或类似软件上进行分布式计算,您的输入数据应该比您在单个硬盘上可以保存的数据多得多,或者您的计算应该比简单的哈希表查找和插入要昂贵得多。您的问题到底是什么?是因为您的数据无法存储在内存中吗?请提供您的代码,以便我们了解问题所在。您的输入文件类型是什么?