Rumah 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


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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perisian apa yang boleh membuat bitcoin? Cadangan Perisian Perdagangan 10 Bitcoin Teratas pada tahun 2025 Perisian apa yang boleh membuat bitcoin? Cadangan Perisian Perdagangan 10 Bitcoin Teratas pada tahun 2025 Feb 21, 2025 pm 09:30 PM

Dengan perkembangan pesat pasaran Bitcoin, adalah penting untuk memilih perisian perdagangan yang boleh dipercayai. Artikel ini akan mencadangkan perisian Perdagangan Sepuluh Bitcoin teratas pada tahun 2025 untuk membantu anda berdagang dengan cekap dan selamat. Perisian ini telah ditayangkan dengan ketat dan mempertimbangkan faktor-faktor seperti fungsi, keselamatan, keramahan pengguna dan tahap sokongan. Dari platform mesra pemula ke alat yang kompleks untuk peniaga yang berpengalaman, anda akan mendapati pilihan terbaik untuk keperluan perdagangan anda dalam senarai ini.

Ringkasan Perisian Essential untuk Bulatan Mata Wang 2025 Ringkasan Perisian Essential untuk Bulatan Mata Wang 2025 Feb 21, 2025 pm 09:42 PM

Panduan ini memberikan gambaran keseluruhan alat perisian penting dalam bulatan mata wang yang membantu pengguna mengurus dan berdagang aset crypto dengan lebih cekap. Perisian ini meliputi pelbagai kategori dari platform perdagangan ke alat analisis dan penyelesaian keselamatan. Panduan ini direka untuk membantu pengguna mempersiapkan pasaran Crypto yang akan datang pada tahun 2025.

GATEIO EXCHANGE Versi lama Gateio Exchange App Versi Lama Saluran Muat turun GATEIO EXCHANGE Versi lama Gateio Exchange App Versi Lama Saluran Muat turun Mar 04, 2025 pm 11:36 PM

Saluran muat turun aplikasi gerbang untuk versi lama, meliputi pasaran aplikasi rasmi, pihak ketiga, komuniti forum dan saluran lain.

Harga terbaru Bitcoin pada 2018-2024 USD Harga terbaru Bitcoin pada 2018-2024 USD Feb 15, 2025 pm 07:12 PM

Harga USD Bitcoin masa nyata Faktor yang menjejaskan harga bitcoin Petunjuk untuk meramalkan harga bitcoin masa depan Berikut adalah beberapa maklumat penting mengenai harga Bitcoin pada 2018-2024:

Perisian tontonan pasaran terbaik? Perisian tontonan pasaran terbaik? Feb 21, 2025 pm 09:48 PM

Bagi mereka yang terlibat dalam perdagangan mata wang maya, memilih perisian tontonan pasaran yang sangat baik adalah penting. Artikel ini bertujuan untuk memperkenalkan pembaca kepada sepuluh perisian tontonan pertukaran mata wang maya yang paling terkenal untuk membantu mereka membuat pilihan yang tepat. Perisian ini menawarkan pelbagai ciri, termasuk petikan masa nyata, alat analisis teknikal, carta dan makluman tersuai untuk memenuhi keperluan peniaga yang berbeza. Sama ada anda seorang profesional yang berpengalaman atau pemula, artikel ini akan memberi anda pandangan yang berharga untuk membantu anda mencari perisian tontonan terbaik untuk gaya perdagangan anda.

Apakah cara yang berbeza untuk mempromosikan program H5 dan mini? Apakah cara yang berbeza untuk mempromosikan program H5 dan mini? Apr 06, 2025 am 11:03 AM

Terdapat perbezaan dalam kaedah promosi H5 dan program mini: ketergantungan platform: H5 bergantung kepada penyemak imbas, dan program mini bergantung kepada platform tertentu (seperti WeChat). Pengalaman Pengguna: Pengalaman H5 adalah miskin, dan program mini memberikan pengalaman yang lancar sama dengan aplikasi asli. Kaedah Komunikasi: H5 disebarkan melalui pautan, dan program mini dikongsi atau dicari melalui platform. Kaedah promosi H5: Perkongsian sosial, pemasaran e -mel, kod QR, SEO, iklan berbayar. Kaedah Promosi Program Mini: Promosi platform, perkongsian sosial, promosi luar talian, ASO, kerjasama dengan platform lain.

OUYI Masuk Login Rasmi 2025 OUYI OKX Platform Perdagangan Versi Rasmi OUYI Masuk Login Rasmi 2025 OUYI OKX Platform Perdagangan Versi Rasmi Feb 15, 2025 pm 07:15 PM

Memahami sepenuhnya pintu masuk rasmi platform dagangan OUYI OKX Pemantauan masa nyata penggunaan platform perdagangan OUYI OKX Perbincangan mendalam mengenai Jaminan Keselamatan dan Pelan Pembangunan Platform Perdagangan Ouyi Okx

Platform Apl Perdagangan Top 10 Top menyenaraikan kedudukan terbaru 10 pertukaran mata wang teratas Platform Apl Perdagangan Top 10 Top menyenaraikan kedudukan terbaru 10 pertukaran mata wang teratas Feb 21, 2025 pm 09:33 PM

Banyak platform pertukaran dengan kekuatan komprehensif yang kuat telah muncul dalam bidang perdagangan aset digital. Antaranya, OKX, Binance dan Huobi telah menjadi penanda aras industri dengan kekuatan teknikal mereka yang kuat, jaminan keselamatan lengkap dan barisan produk yang kaya. Ditubuhkan pada tahun 2013, OKX mempunyai pasukan teknikal yang kukuh dan enjin perdagangan dan sistem keselamatan berprestasi tinggi yang maju memastikan pengalaman perdagangan pengguna. Binance terkenal dengan jumlah perdagangan terbesar di dunia. Huobi telah terlibat dalam industri selama bertahun -tahun dan mempunyai reputasi pengguna yang baik dan pengaruh jenama.

See all articles