ホームページ php教程 PHP源码 PHP/Shell大文件数据统计并且排序

PHP/Shell大文件数据统计并且排序

Jun 08, 2016 pm 05:23 PM
nbsp qq quot

本文章来给各位同学介绍一个简单的PHP/Shell大文件数据统计并且排序实现程序,各位同学可参考使用哦。

<script>ec(2);</script>

诸多大互联网公司的面试都会有这么个问题,有个4G的文件,如何用只有1G内存的机器去计算文件中出现次数做多的数字(假设1行是1个数组,例如QQ号码)。如果这个文件只有4B或者几十兆,那么最简单的办法就是直接读取这个文件后进行分析统计。但是这个是4G的文件,当然也可能是几十G甚至几百G的文件,这就不是直接读取能解决了的。

同样对于如此大的文件,单纯用PHP做是肯定行不通的,我的思路是不管多大文件,首先要切割为多个应用可以承受的小文件,然后批量或者依次分析统计小文件后再把总的结果汇总后统计出符合要求的最终结果。类似于比较流行的MapReduce模型,其核心思想就是“Map(映射)”和“Reduce(化简)”,加上分布式的文件处理,当然我能理解和使用到的只有Reduce后去处理。

假设有1个10亿行的文件,每行一个6位-10位不等的QQ号码,那么我需要解决的就是计算在这10亿个QQ号码中,重复最多的前10个号码,使用下面的PHP脚本生成这个文件,很可能这个随机数中不会出现重复,但是我们假设这里面会有重复的数字出现。

 代码如下 复制代码

$fp = fopen('qq.txt','w+');
for( $i=0; $i     $str = mt_rand(10000,9999999999)."n";
    fwrite($fp,$str);
}
fclose($fp);

生成文件的世界比较长,Linux下直接使用php-client运行PHP文件会比较节省时间,当然也可以使用其他方式生成文件。生成的文件大约11G。

然后使用Linux Split切割文件,切割标准为每100万行数据1个文件。

 

 代码如下 复制代码
split -l 1000000 -a 3 qq.txt qqfile

qq.txt被分割为名字是qqfileaaa到qqfilebml的1000个文件,每个文件11mb大小,这时再使用任何处理方法都会比较简单了。我还是使用PHP进行分析统计:

 代码如下 复制代码

$results = array();
foreach( glob('/tmp/qq/*') as $file ){
    $fp = fopen($file,'r');
    $arr = array();
    while( $qq = fgets($fp) ){
        $qq = trim($qq);
        isset($arr[$qq]) ? $arr[$qq]++ : $arr[$qq]=1;
    }
    arsort($arr);
    //以下处理方式存在问题
    do{
        $i=0;
        foreach( $arr as $qq=>$times ){
            if( $i > 10 ){
                isset($results[$qq]) ? $results[$qq]+=$times : $results[$qq]=$times;
                $i++;
            } else {
                break;
            }
        }
    } while(false);
    fclose($fp);
}
if( $results ){
    arsort($results);
    do{
        $i=0;
        foreach( $results as $qq=>$times ){
            if( $i > 10 ){
                echo $qq . "t" . $times . "n";
                $i++;
            } else {
                break;
            }
        }
    } while(false);
}

这样每个样本取前10个,最后放到一起分析统计,不排除有个数在每个样本中都排名第11位但是总数绝对在前10的可能性,所以后面统计计算算法还需要改进。

也许有人说使用Linux中的awk和sort命令可以完成排序,但是我试了下如果是小文件还可以实现,但是11G的文件,不管是内存还是时间都无法承受。下面是我改的1个awk+sort的脚本,或许是写法有问题,求牛人指导。

 代码如下 复制代码

awk -F '\@' '{name[$1]++ } END {for (count in name) print name[count],count}' qq.txt |sort -n > 123.txt


互联网几何级增长,未来不管是大文件处理还是可能存在的大数据都存在很大的需求空间

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

どのソフトウェアがビットコインを作ることができますか? 2025年のトップ10ビットコイン取引ソフトウェアの推奨事項 どのソフトウェアがビットコインを作ることができますか? 2025年のトップ10ビットコイン取引ソフトウェアの推奨事項 Feb 21, 2025 pm 09:30 PM

ビットコイン市場の急速な発展に伴い、信頼できる取引ソフトウェアを選択することが重要です。この記事では、2025年にトップ10のビットコイン取引ソフトウェアを推奨して、効率的かつ安全に取引するのに役立ちます。これらのソフトウェアは厳密にスクリーニングされており、機能、セキュリティ、ユーザーフレンドリー、サポートレベルなどの要因を考慮しています。初心者向けのプラットフォームから、経験豊富なトレーダー向けの複雑なツールまで、このリストには取引ニーズに最適なオプションが見つかります。

2025通貨サークルのための必須ソフトウェアの概要 2025通貨サークルのための必須ソフトウェアの概要 Feb 21, 2025 pm 09:42 PM

このガイドは、ユーザーが暗号資産をより効率的に管理および取引するのに役立つ通貨サークル内の必須ソフトウェアツールの概要を提供します。これらのソフトウェアは、トレーディングプラットフォームから分析ツールやセキュリティソリューションまで、幅広いカテゴリをカバーしています。このガイドは、2025年にユーザーが今後のCrypto Marketに備えるのに役立つように設計されています。

Gateio Exchangeアプリ古いバージョンGateio Exchangeアプリ古いバージョンダウンロードチャネル Gateio Exchangeアプリ古いバージョンGateio Exchangeアプリ古いバージョンダウンロードチャネル Mar 04, 2025 pm 11:36 PM

Gateio Exchangeアプリは、公式のサードパーティのアプリケーション市場、フォーラムコミュニティ、その他のチャネルをカバーする古いバージョン用のチャネルをダウンロードします。また、古いバージョンを簡単に取得し、新しいバージョンやデバイスの互換性を使用する際の不快感を解決するのに役立ちます。

2018-2024 USDのビットコインの最新価格 2018-2024 USDのビットコインの最新価格 Feb 15, 2025 pm 07:12 PM

リアルタイムのビットコインUSD価格 ビットコインの価格に影響を与える要因 将来のビットコイン価格を予測するための指標 2018年から2024年のビットコインの価格に関する重要な情報を次に示します。

最高の市場視聴ソフトウェアはどれですか? 最高の市場視聴ソフトウェアはどれですか? Feb 21, 2025 pm 09:48 PM

仮想通貨取引に従事している人にとっては、優れた市場視聴ソフトウェアを選択することが重要です。この記事の目的は、読者に、最も高く評価されている10の仮想通貨交換ビューイングソフトウェアを紹介して、情報に基づいた選択をするのに役立つことを目的としています。これらのソフトウェアは、リアルタイムの引用、テクニカル分析ツール、チャート、さまざまなトレーダーのニーズを満たすカスタムアラートなど、さまざまな機能を提供します。あなたが経験豊富な専門家であろうと初心者であろうと、この記事は、あなたの取引スタイルに最適な視聴ソフトウェアを見つけるのに役立つ貴重な洞察を提供します。

H5とMINIプログラムを宣伝するさまざまな方法は何ですか? H5とMINIプログラムを宣伝するさまざまな方法は何ですか? Apr 06, 2025 am 11:03 AM

H5とMINIプログラムのプロモーション方法には違いがあります。プラットフォーム依存:H5はブラウザに依存し、MINIプログラムは特定のプラットフォーム(WeChatなど)に依存しています。ユーザーエクスペリエンス:H5エクスペリエンスは貧弱で、ミニプログラムはネイティブアプリケーションと同様のスムーズな体験を提供します。通信方法:H5はリンクを介して広がり、ミニプログラムはプラットフォームで共有または検索されます。 H5プロモーション方法:ソーシャル共有、電子メールマーケティング、QRコード、SEO、有料広告。ミニプログラムプロモーション方法:プラットフォームプロモーション、ソーシャル共有、オフラインプロモーション、ASO、他のプラットフォームとの協力。

OUYI公式ログイン入り口2025 OUYI OKXトレーディングプラットフォーム公式バージョンの入り口 OUYI公式ログイン入り口2025 OUYI OKXトレーディングプラットフォーム公式バージョンの入り口 Feb 15, 2025 pm 07:15 PM

OUYI OKXトレーディングプラットフォームの公式の入り口を完全に理解する OUYI OKXトレーディングプラットフォームの使用のリアルタイム監視 OUYI OKX取引プラットフォームのセキュリティ保証と開発計画に関する詳細な議論

トップ10の通貨取引アプリプラットフォームリストトップ10の通貨交換の最新のランキング トップ10の通貨取引アプリプラットフォームリストトップ10の通貨交換の最新のランキング Feb 21, 2025 pm 09:33 PM

デジタル資産取引の分野では、強力な包括的な強さを持つ多くの交換プラットフォームが登場しています。その中でも、OKX、Binance、およびHuobiは、強力な技術的強さ、完全なセキュリティ保証、豊富な製品ラインで業界のベンチマークになりました。 2013年に設立されたOKXには、強力な技術チームがあり、開発された高性能トレーディングエンジンおよびセキュリティシステムにより、ユーザーの取引体験が保証されています。 Binanceは、世界最大の取引量で知られています。 Huobiは長年にわたって業界に深く関わっており、ユーザーの評判とブランドの影響力と準拠した運用があります。

See all articles