2016-05-27 4 views
-1

Я новичок в Perl и пытаюсь найти лучший способ реализовать это, но не уверен в синтаксисе на данный момент.Perl Hash/Array Implementation for Hadoop

Мой скрипт прямо сейчас читает файл с 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