2014-10-06 53 views
0

我有數據文件拆分「|」所以我使用下面的代碼。豬羣添加

RAW_LOG = LOAD 'logs.log' USING TextLoader as (line:chararray); 
    splt = foreach RAW_LOG generate FLATTEN(STRSPLIT($0, '\\|')); 
    id_vals = foreach splt generate $4 as uid, $8 as site_id , $9 as dsid , $6 as amt; 

我想sum(amt)每個site_id,我試過group by但沒有工作。

+0

您是否想通過site_id進行分組並總結每個組的amt值? – mbaxi 2014-10-06 07:56:41

回答

2

我假設你想最終的結果是兩個欄目site_id和該site_id amt的總和。

您可以使用PigStorage直接加載管道分隔文件,無需加載然後拆分。儘管可以使用$來訪問元素,但提供模式定義會很好。

這裏是代碼 -

RAW_LOG = LOAD 'logs.log' USING PigStorage('|') as (//YOUR SCHEMA DEFINITION); 
SITE_GRP = group RAW_LOG by site_id; 
SITE_SUM = foreach SITE_GRP generate group, SUM(RAW_LOG.amt); 

希望這有助於。

+0

我得到了「雙打問題」。 我嘗試將float設置爲數據類型,以使其不會有任何字符。 – Smit 2014-10-06 13:41:48

+0

您可以分享您的示例數據和架構定義,雙倍以及我得到正確的結果。 – mbaxi 2014-10-06 14:11:08

+0

我通過添加工作。 (float)在foreach內部投射。 謝謝你的伴侶。 – Smit 2014-10-06 14:25:13