Tag: 大数据

什么导致Python分段错误?

我正在Python中实现Kosaraju的强连通组件(SCC)图searchalgorithm。 该程序在小数据集上运行良好,但是当我在超大图(超过80万个节点)上运行它时,它会显示“Segmentation Fault”(分段错误)。 可能是什么原因呢? 谢谢! 附加信息:首先,我在超大型数据集上运行时遇到此错误: "RuntimeError: maximum recursion depth exceeded in cmp" 然后我使用重置recursion限制 sys.setrecursionlimit(50000) 但得到了“分段错误” 相信我这不是一个无限循环,它在相对较小的数据上运行正确。 程序可能耗尽了资源吗?

如果使用带有大对象的枚举,Parallel.ForEach可能会导致“内存不足”exception

我试图迁移一个数据库,其中存储在数据库中的图像到数据库中的一条logging指向硬盘上的一个文件。 我正在尝试使用Parallel.ForEach来加快使用此方法查询数据的过程。 但是我注意到我正在得到一个OutOfMemoryexception。 我知道Parallel.ForEach将查询一批枚举types,以减less开销的代价,如果有一个用于间隔查询(所以如果你一次做了一堆查询,你的源代码更有可能将下一条loggingcaching在内存中把它们隔开)。 这个问题是由于我返回的logging是一个1-4Mb字节的数组,caching导致整个地址空间用完(程序必须以x86模式运行,因为目标平台将是32位机器) 有什么办法可以禁用caching或使TPL更小? 这里是一个示例程序来展示这个问题。 这必须在x86模式下进行编译,以显示问题,如果需要花费很长时间,或者在您的机器上没有发生问题,则会增加arrays的大小(我发现1 << 20在我的机器上需要大约30秒, 4 << 20几乎是瞬间的) class Program { static void Main(string[] args) { Parallel.ForEach(CreateData(), (data) => { data[0] = 1; }); } static IEnumerable<byte[]> CreateData() { while (true) { yield return new byte[1 << 20]; //1Mb array } } }

SELECT COUNT()vs mysql_num_rows();

我有一个大桌子(60+)百万条logging。 我正在使用PHP脚本来浏览这个表格。 PHP脚本(与分页)加载非常快,因为: 表引擎是InnoDB,因此SELECT COUNT()非常慢,而mysql_num_rows()不是一个选项,所以我保留在一个单独的表中的总行数(我用来生成分页的数量)(我更新这个loggingtotal_rows=total_rows-1 DELETE和INSERT期间total_rows=total_rows-1和total_rows=total_rows1+1 )。 但问题是如何处理search结果的分页? 现在我用两个步骤来做这个: 1。 $condition = " fname='rinchik' "; $result = "SELECT * FROM my_large_table WHERE" . $condition; 在这里,我从DataBase获得所有search结果。 现在我需要把这些结果计算在一起来创build分页。 我正在这样做: $condition; <- we already have this from the step 1 $result_count = "SELECT COUNT(id) FROM my_large_table WHERE" . $condition; 而且有点慢。 如果我这样做(只要一步),会更好吗? $condition = " fname='rinchik' "; $result = […]

我如何只读行履行条件从CSV到R?

我想读取一个大的csv文件到R中。尽pipe文件很大,我只想处理满足特定条件的一些行(例如Variable2> = 3)。 这是一个小得多的数据集。 我想直接将这些行读入数据框,而不是将整个数据集加载到数据框中,然后根据条件进行select。 主要原因是数据集不容易适应桌面或笔记本电脑的内存。 我正在寻找一个只使用R的解决scheme,并不需要python或其他语言。 谢谢。

如何与一个PNG作为背景阴谋?

我做了一个300万点的阴谋,并保存为PNG。 花了几个小时,我想避免重新绘制所有的要点。 我怎样才能产生一个新的情节,这个PNG作为背景?

多处理中的共享内存

我有三个大名单。 首先包含bitarrays(模块bitarray 0.8.0),另外两个包含整数数组。 l1=[bitarray 1, bitarray 2, … ,bitarray n] l2=[array 1, array 2, … , array n] l3=[array 1, array 2, … , array n] 这些数据结构需要相当多的RAM(总共约16GB)。 如果我开始使用12个subprocess: multiprocessing.Process(target=someFunction, args=(l1,l2,l3)) 这是否意味着将为每个子stream程复制l1,l2和l3,或者这些子stream程是否会共享这些列表? 或者更直接的,我会使用16GB或192GB的RAM吗? someFunction将从这些列表中读取一些值,然后根据读取的值执行一些计算。 结果将返回到父进程。 列表l1,l2和l3不会被某些函数修改。 因此,我会假设子stream程不需要也不会复制这些庞大的列表,而只是将它们与父级分享。 也就是说,由于linux下的copy-on-write方法,程序会占用16GB的内存(无论启动多less个subprocess)? 我是正确的,还是我错过了会导致列表被复制的东西? 编辑 :我仍然困惑,在阅读了更多的主题后。 一方面,Linux使用copy-on-write,这意味着没有数据被复制。 另一方面,访问对象将改变它的ref-count(我仍然不确定为什么,这是什么意思)。 即使如此,整个对象是否会被复制? 例如,如果我定义一些function,如下所示: def someFunction(list1, list2, list3): i=random.randint(0,99999) print list1[i], list2[i], list3[i] 使用这个函数是否意味着l1,l2和l3将被完全复制到每个subprocess? 有没有办法检查这个? […]

“大数据”使用大pandas的工作stream程

在学习pandas的同时,我试图在这个问题上解答好几个月。 我使用SAS进行日常工作,这对我们来说是非常棒的支持。 然而,由于其他原因,SAS作为一款软件是非常糟糕的。 有一天,我希望用python和pandas来替代我的SAS,但是我目前缺乏大型数据集的核心外工作stream程。 我不是在谈论需要分布式networking的“大数据”,而是文件太大而不适合内存,但又足够小以适应硬盘驱动器。 我的第一个想法是使用HDFStore在磁盘上保存大型数据集,并只将需要的部分HDFStore到数据HDFStore进行分析。 其他人则提到MongoDB是一个更易于使用的替代scheme。 我的问题是这样的: 什么是一些最佳实践工作stream程来完成以下工作: 将平面文件加载到永久性的磁盘数据库结构中 查询该数据库以检索要送入pandas数据结构的数据 在pandas中操作片断之后更新数据库 真实世界的例子会受到大家的赞赏,尤其是那些使用“大数据”的pandas的人。 编辑 – 我如何工作的例子: 迭代地导入一个大的平面文件并将其存储在一个永久性的磁盘数据库结构中。 这些文件通常太大而不适合内存。 为了使用pandas,我想读取这些数据的子集(通常只有几列),可以适应内存。 我会通过对所选列进行各种操作来创build新列。 然后我必须将这些新列添加到数据库结构中。 我正在试图find执行这些步骤的最佳实践方式。 阅读有关pandas和pytables的链接似乎是追加一个新的列可能是一个问题。 编辑 – 特别回应杰夫的问题: 我正在build立消费者信用风险模型。 数据种类包括电话,SSN和地址特征; 财产价值; 像犯罪logging,破产等贬义的信息…我每天使用的数据集平均有近1000到2000个混合数据types的字段:数字和字符数据的连续variables,名义variables和有序variables。 我很less追加行,但是我执行许多操作来创build新的列。 典型的操作涉及将使用条件逻辑的多个列组合成新的复合列。 例如, if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B' 。 这些操作的结果是我的数据集中每个logging的新列。 最后,我想将这些新列添加到磁盘数据结构中。 我会重复第2步,用交叉表和描述性统计数据来探索数据,试图find有趣的,直观的关系模型。 一个典型的项目文件通常是大约1GB。 文件被组织成一行,其中包含消费者数据的logging。 […]