hadoop 进阶实例

三个文件

one.txt  格式如下

号码 标签   数量

two.txt 格式如下

号码  标签   数量

number.txt

133658207 


需求是找出第三个文件中的号码,出现在前两个文件中的 号码  标签   数量

输出格式

号码  标签   数量


mapper.php

#!/usr/bin/php
<?php
error_reporting(0);
$in = fopen("php://stdin", "r");
$results = array();


while ( $line = fgets($in, 4096) )
{
if(empty($line)) {
continue;
}
$line = trim($line, PHP_EOL);
$temp = explode("\t", trim($line));
$key = $temp[0];
$value = $line;
print "$key\t$line\n";  //关键要加key ,reduce时按key排序
}
fclose($in);

reducer.php

#!/usr/bin/php
<?php
error_reporting(0);
ini_set('memory_limit','100M');  
$in = fopen("php://stdin", "r");


$last_number = '';
$last_tag = '';
$last_amount = 0;


while ( $line = fgets($in, 4096) )
{
   $temp = explode("\t", trim($line));
   if(empty($line) || !isset($temp[1])) {
    continue;
   }
   
   $number = $temp[1];
   if($number == $last_number) {
    if($last_tag) {
    echo $last_number . ' ' . $last_tag . ' ' . $last_amount . "\n"; 
    }else {
    echo $temp[1] . ' ' . $temp[2] . ' ' . $temp[3] . "\n"; 
    }
    $last_number = '';
    $last_amount = 0;
    $last_tag = '';
   } else {
    $last_number = $temp[1];
    if(isset($temp[2])) {
    $last_tag = $temp[2];
    $last_amount = $temp[3];
    }else {
    $last_tag = '';
    $last_amount = 0;
    }
   }
}


fclose($in);




  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值