Hadoop的{Perl Hash / Array实现

时间:2016-05-27 20:56:43

标签: arrays perl hadoop hash

我是Perl的新手,并试图找出实现它的最佳方法,但目前还不确定语法。

我现在的脚本是从HDFS读取文件,其中包含许多可能性中的键值对。

例如,假设我的键可以是A,B,C,D,E

我正在阅读的文件将换行符分隔为:

A,50
C,30

在我的脚本中,我想读取文件并将变量分配给相应的值,如果不存在任何变量,我想将它们分配给零值。

因此,在脚本结束时,我想要一个输出打印如下:

A=50,B=0,C=30,D=0,E=0

由于我对Perl的了解有限,我想知道如何建立最好的循环来收集这样的信息?我有读取文件的功能,但没有将指标收集到某种Array或Hash分组中。

2 个答案:

答案 0 :(得分:1)

use strict;
use warnings; 

my @keys = qw(A B C D E);     
open my $fh, '<', $filename_from_hdfs
   or die "$!";

my %mapping;
while ( my $line = readline($fh) ) {
   chomp($line);
   my ($key, $value) = split /,/, $line; 

   $mapping{$key} = $value; 
}

# zero out keys with no value
$mapping{$_} //= 0 foreach @keys; 

print join(',', map { "$_=$mapping{$_}" } sort keys %mapping), "\n";

答案 1 :(得分:1)

my %result;
#assign zero to all keys
for my $key ('A' .. 'E')
{
 $result{$key} = 0;
}
#open file, read each line one by one
#Split each read line from file in ($key, $value).
result{$key} = $value;

#After finishing reading the file, traverse %result and output key, values