美文网首页PHP经验分享PHP很简单码农的世界
常见问题[04]:如何高效迭代处理大型数据集

常见问题[04]:如何高效迭代处理大型数据集

作者: 四月不见 | 来源:发表于2018-07-31 22:37 被阅读6次

源码地址:如何高效迭代处理大型数据集

Summary

希望可以迭代处理一个元素列表,不过整个列表会占用大量内存,或者生成整个列表的速度非常慢。

最简单的方法是使用file()函数。这会打开文件,将每一行分别加载到一个数组中的一个元素,然后关闭文件。不过,这样将把整个文件都保存在内存中。

$file = file('log.txt');
foreach ($file as $line) {
    if (preg_match('/^error: /',$line)) print $line.'</br>';
}

Solve

更好的解决办法是,使用一个生成器,如下:

// The Generator
function FileLineGenerator($file) {
    if(!$fh = fopen($file,'r')) {
        return;
    }
    while (false !== ($line = fgets($fh))) {
        yield $line;
    }
    fclose($fh);
}

// Test
$file = FileLineGenerator('log.txt');
foreach ($file as $line) {
    if (preg_match('/^error: /',$line)) {
        print $line.'</br>';
    }
}

Reference

《PHP经典实例》 David Sklar & Adam Trachtenberg

关于生成器的介绍:https://www.jianshu.com/p/b55a3670ceae

Author

nosee123

License

MIT Public License

相关文章

  • 常见问题[04]:如何高效迭代处理大型数据集

    源码地址:如何高效迭代处理大型数据集 Summary 希望可以迭代处理一个元素列表,不过整个列表会占用大量内存,或...

  • Python编程技巧

    高效处理数据类型方法: 可迭代对象和迭代器对象: 读写取excel文件 Microsoft Excel是Micro...

  • Flink-Gelly:Iterative Graph Proc

    Gelly利用Flink的高效迭代算子来支持海量数据的迭代式图处理。目前,Flink Gelly提供了“Verte...

  • Python可迭代对象/迭代器/生成器

    Python可迭代对象/迭代器/生成器 概述 迭代是数据处理的基石. 扫描内存中放不下的数据集时, 需要找到一种惰...

  • python必知必会9

    生成器和迭代器 迭代是处理数据的重要环节,基本上对大量数据的处理上,我们都需要对数据进行迭代操作,如何在节省内存开...

  • 大规模机器学习(Large Scale Machine Lear

    1.大型数据集的学习 处理大数据集的算法近年来机器学习技术的发展归因于我们有极其庞大的数据用来训练我们的算法。处理...

  • DL4J中文文档/模型/迭代器-1

    什么是迭代器? 数据集迭代器允许将数据轻松加载到神经网络中,并帮助组织批处理、转换和掩码。包含在Eclipse D...

  • itertools模块详解

    itertools模块包含一组函数用于处理序列数据集。 合并和分解迭代器 chain 用于合并多个迭代器, 利用c...

  • Python生成一个迭代器的实操方法

    Python怎么生成一个迭代器,对于需要处理大型数据来说,迭代器是必不可少的,这样可节省大量内存空间,更加合理操作...

  • 大数据工具Hadoop快速入门13大数据测试

    大数据是不能使用传统计算技术处理的大型数据集的集合。这些数据集的测试涉及各种工具,技术和框架。大数据涉及数据创建,...

网友评论

    本文标题:常见问题[04]:如何高效迭代处理大型数据集

    本文链接:https://www.haomeiwen.com/subject/mjceyftx.html