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

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

어떤 소프트웨어가 비트 코인을 만들 수 있습니까? 2025 년 상위 10 개 비트 코인 거래 소프트웨어 권장 사항 어떤 소프트웨어가 비트 코인을 만들 수 있습니까? 2025 년 상위 10 개 비트 코인 거래 소프트웨어 권장 사항 Feb 21, 2025 pm 09:30 PM

비트 코인 시장의 빠른 발전으로 신뢰할 수있는 거래 소프트웨어를 선택하는 것이 중요합니다. 이 기사는 효율적이고 안전하게 거래 할 수 있도록 2025 년 Top Ten Bitcoin Trading 소프트웨어를 권장합니다. 이 소프트웨어는 엄격하게 스크리닝되었으며 기능, 보안, 사용자 친화 성 및 지원 수준과 같은 요소를 고려합니다. 초보자 친화적 인 플랫폼에서 경험이 풍부한 거래자를위한 복잡한 도구에 이르기 까지이 목록에서 거래 요구에 가장 적합한 옵션을 찾을 수 있습니다.

2025 통화 서클에 대한 필수 소프트웨어 요약 2025 통화 서클에 대한 필수 소프트웨어 요약 Feb 21, 2025 pm 09:42 PM

이 안내서는 통화 서클의 필수 소프트웨어 도구에 대한 개요를 제공하여 사용자가 암호화 자산을보다 효율적으로 관리하고 거래 할 수 있도록 도와줍니다. 이 소프트웨어는 거래 플랫폼에서 분석 도구 및 보안 솔루션에 이르기까지 다양한 범주를 다룹니다. 이 안내서는 사용자가 2025 년에 다가오는 암호 시장을 준비 할 수 있도록 설계되었습니다.

Gateio Exchange App Old 버전 Gateio Exchange App Old 버전 다운로드 채널 Gateio Exchange App Old 버전 Gateio Exchange App Old 버전 다운로드 채널 Mar 04, 2025 pm 11:36 PM

Gateio Exchange 앱은 공식, 제 3 자 애플리케이션 시장, 포럼 커뮤니티 및 기타 채널을 다루는 기존 버전의 채널을 다운로드합니다. 또한 기존 버전을 쉽게 얻고 새로운 버전 또는 장치 호환성을 사용하여 불편 함 문제를 해결하는 데 도움이됩니다.

2018-2024 USD의 Bitcoin의 최신 가격 2018-2024 USD의 Bitcoin의 최신 가격 Feb 15, 2025 pm 07:12 PM

실시간 비트 코인 USD 가격 비트 코인 가격에 영향을 미치는 요인 향후 비트 코인 가격을 예측하기위한 지표 다음은 2018-2024 년 비트 코인 가격에 대한 몇 가지 주요 정보입니다.

최고의 시장보기 소프트웨어는 무엇입니까? 최고의 시장보기 소프트웨어는 무엇입니까? Feb 21, 2025 pm 09:48 PM

가상 통화 거래에 종사하는 사람들에게는 훌륭한 시장 시청 소프트웨어를 선택하는 것이 중요합니다. 이 기사는 독자들에게 가장 유명한 10 가지 가상 환전 교환 시청 소프트웨어를 소개하여 정보에 입각 한 선택을 할 수 있도록하는 것을 목표로합니다. 이 소프트웨어는 실시간 인용문, 기술 분석 도구, 차트 및 사용자 정의 경고를 포함하여 다양한 트레이더의 요구를 충족시키는 다양한 기능을 제공합니다. 숙련 된 전문가이든 초보자이든,이 기사는 거래 스타일에 가장 적합한 시청 소프트웨어를 찾는 데 도움이되는 귀중한 통찰력을 제공합니다.

H5 및 미니 프로그램을 홍보하는 다른 방법은 무엇입니까? H5 및 미니 프로그램을 홍보하는 다른 방법은 무엇입니까? Apr 06, 2025 am 11:03 AM

H5 및 Mini 프로그램의 홍보 방법에는 차이가 있습니다. 플랫폼 의존성 : H5는 브라우저에 의존하고 미니 프로그램은 특정 플랫폼 (예 : WeChat)에 의존합니다. 사용자 경험 : H5 경험이 좋지 않으며 MINI 프로그램은 기본 응용 프로그램과 유사한 원활한 경험을 제공합니다. 커뮤니케이션 방법 : H5는 링크를 통해 퍼지고 미니 프로그램은 플랫폼을 통해 공유하거나 검색됩니다. H5 프로모션 방법 : 소셜 공유, 이메일 마케팅, QR 코드, SEO, 유료 광고. 미니 프로그램 프로모션 방법 : 플랫폼 프로모션, 소셜 공유, 오프라인 프로모션, ASO, 다른 플랫폼과의 협력.

OUYI 공식 로그인 입구 2025 OUYI OKX 거래 플랫폼 공식 버전 입구 OUYI 공식 로그인 입구 2025 OUYI OKX 거래 플랫폼 공식 버전 입구 Feb 15, 2025 pm 07:15 PM

Ouyi Okx Trading Platform의 공식 입구를 완전히 이해하십시오. 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