分析海量数据.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分析海量数据

转自cnblogs 程序员应知 -- 如何分析海量数据 在这个云计算热炒的时代,如果你没有处理过海量数据的话,你将不再是个合格的Coder。现在赶紧补补吧~ 前一阵子分析了一个将近1TB的数据群(gz文件,压缩率10%)。因为第一次分析如此巨大的数据,没有经验,所以浪费了许多时间。下面是我整理的一些经验,方便后者。 欢迎各种补充,我会不断更新这篇文章;觉得有用的话,速度分享链接;有不同意见的话,请果断拍砖; 下载数据 Q:怎么自动下载多个文件? 这是我遇到的第一个问题。当数据量很大时,一般都会分成很多个文件存放。这时下载文件比较麻烦。 A:用Wget命令。Windows下花费一点时间去下载安装。但之于手动下载,能省不少时间。 我提供两种方式方式下载文件, a)用Wget的递归下载选项 “-r”。一般命令如下 wget –r http://下载数据的根目录/? -o 下载记录文件名? -np 因为递归下载没法控制进度,所以建议不一要次递归下载太多的文件 b)用Bat+Wget,多次执行Wget。一般命令如下 wget –r http://下载数据的根目录分支1/? -o 下载记录文件名? -np wget –r http://下载数据的根目录分支2/? -o 下载记录文件名? -np wget –r http://下载数据的根目录分支3/? -o 下载记录文件名? -np …… …… wget –r http://下载数据的根目录分支N/? -o 下载记录文件名? -np 用Bat可以降低出错带来的影响。 另外,Wget可以通过 –A 选项来指定希望下载的文件的后辍,通过 –P 选项来指定下载文件存放路径。更多命令,参见wget -h ? Q:这速度。。。什么时候才能下完? 网速永远是个瓶颈 A:如果下载服务很远的话,你应该考虑代理。wget设置代理的方式如下 set http_proxy=http://代理服务器 不要忘了多开几个进程,20个试试? ? 打开文件 Q:怎么打开文本文件 这不是弱智问题。你用记事本打开一个1000MB的文件试试 A:LTF viewer Large Text File viewer, 打开速度会让你惊奇 ? Q:怎么打开二进制文件 A:Hex Editor Neo 你可以通过下面方式来选择进制: 右击数据区 = Display As = Hex|Decimal|Octal|Binary|Float|Double 你可以通过下面方式来选择按多少字节显示: 右击数据区 = Group By = Bytes|Words|Double|Quad ?? 编程语言 当数据量很大时,选择语言要慎重了。因为不同语言有不同的特点,你要在编程时间和运行时间之间权衡。 模型测试 开始时,一般挑几个小的数据进行测试,获取第一份分析结果。这时当然希望能快速编程实现。脚本语言是一个很好的选择,比如Python。 大量处理 开始遍历处理所有数据时,用脚本语言来处理就不太合适了。因为脚本语言的运行时间不能让人接受。另外,还有内存使用,文件读写这些你都没法控制。不幸的是,很少语言会为你处理海量文件做优化。 这时,C/C++是最好的选择。 结果展示 漫长的等待终于过去了,眼看就要出结果了。如果你还执着于陪伴你度过漫长等待的C/C++的话,你迟早会沮丧的。 我尝试了很多方式之后,得出的结论是,让Matlab来接手C/C++。Matlab能轻而易举地展示大量数据。更重要的是Matlab支持读取二进制文件。 filename = out.bin;??????? % binary file fid = fopen( filename ); data = fread( fid, itemsNumber, *uint32); fclose(fid); ?? 算法 一次性读文件 我已经测试过好几次了,一次性读取文件比一行一行读文件至少快五倍 记住O(N) 这时你要好好考虑算法的复杂度了。任何O(N2)的算法都不可取。 必要的时候可以通过空间来换时间。通常哈希表能节省不少时间。 并行处理 温习一下并行算法。这比等待单线程程序好很多。 可以考虑在GPU上跑程序。当然,内存和文件读取时间更可能是瓶颈。 内存、CPU、磁盘读取速度,谁是瓶颈,任务管理器知道。 优化核心代码 通常80%的时间在运行20%的代码。所以有空的话优化下经常经常执行的代码。 分布式保存 把分析结果存在一个文件中是一个很糟糕的决定。这会为后面处理带来很多麻烦。比如并行处理,文件过大等。 二进制方式保存中间数据 二进制方式存放通常能省一半的磁盘空间。这同时意味着减少一半的写硬盘时间和读硬盘时间。当然,还有文本转换时间。 还有个重要细节要注意:在Windo

文档评论(0)

kakaxi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档