Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 大数据文件:读取和创建结构化文件_Python_C++_File Io_Dataset_Bigdata - Fatal编程技术网

Python 大数据文件:读取和创建结构化文件

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++中编写脚本来加载文件,创建长字符串,并逐行写入文件。然而,这两种语言似乎都无法处理手头的任务。有人对如何解决这个问题有什么建议吗?具体而言,是否有一种特定的方法/程序最适合于此?任何帮助或指导都将不胜感

我有一个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++中编写脚本来加载文件,创建长字符串,并逐行写入文件。然而,这两种语言似乎都无法处理手头的任务。有人对如何解决这个问题有什么建议吗?具体而言,是否有一种特定的方法/程序最适合于此?任何帮助或指导都将不胜感激。

您可以使用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或类似软件上进行分布式计算,您的输入数据应该比您在单个硬盘上可以保存的数据多得多,或者您的计算应该比简单的哈希表查找和插入要昂贵得多。

    您的问题到底是什么?是因为您的数据无法存储在内存中吗?请提供您的代码,以便我们了解问题所在。您的输入文件类型是什么?