2016-05-27 80 views
-1

我是Perl新手,試圖找出實現此目的的最佳方式,但目前還不確定語法。Hadoop的Perl哈希/陣列實現

我現在的腳本正在讀HDFS中的一個文件,該文件包含許多可能性中的關鍵值對。

例如,讓我們說,我可以有從A,B,C,d,E

範圍的鍵,我從閱讀該文件將換行分隔的樣子:

A,50 
C,30 

在我的腳本中,我想讀取文件並將變量分配給相應的值,如果有任何變量不存在,我想將它們賦值爲零值。

因此,由腳本的最後,我想有一個打印像這樣的輸出:

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

隨着我在Perl有限的知識,我不知道如何設置最佳的環路收集這樣的信息會是?我有讀取文件的功能,但沒有收集度量值到某種Array或Hash分組。

+0

請出示你寫的代碼 – Borodin

回答

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
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