Сравните значение Tuples, присутствующее в сумке, с жестко закодированным значением String - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть набор данных с этими столбцами: -

FMID,County,WIC,WICcash

Вот пример данных: -

1002267,Douglas,Y,N
21005876,Douglas,Y,N
1001666,Douglas,N,Y

Я сгруппировал данные по округам и отфильтровалданные основаны на County = 'Douglas'.Вот вывод:

(Douglas,{(1002267,Douglas,Y,N),(21005876,Douglas,Y,N),(1001666,Douglas,N,Y)})

Теперь, если столбцы WIC и WICcash имеют значение как Y, тогда я хочу взять объединенное количество значений из обоих столбцов.

Здесь, комбинируя столбцы WIC и WICcash, я получаю значения 3 Y, поэтому мой вывод будет

Douglas 3

Как мне этого добиться?

Ниже приведенокод, который я написал до сих пор

load_data = LOAD 'PigPrograms/Markets/DATA_GOV_US_Farmers_Market_DataSet.csv' USING PigStorage(',') as (FMID:long,County:chararray, WIC:chararray, WICcash:chararray);

group_markets_by_county = GROUP load_data BY County;

filter_county = FILTER group_markets_by_county BY group == 'Douglas';

DUMP filter_county;

1 Ответ

0 голосов
/ 15 февраля 2019

Для просмотра в сумке вы можете использовать вложенный foreach.

A = LOAD 'input3.txt' AS (FMID:long,County:chararray, WIC:chararray, WICcash:chararray);
B = GROUP A by County;
describe B; /* B: {group: chararray,A: {(FMID: long,County: chararray,WIC: chararray,WICcash: chararray)}} */ 
C = FOREACH B {
        FILTER_WIC_Y = FILTER A by WIC == 'Y';
        COUNT_WIC_Y = COUNT(FILTER_WIC_Y);
        FILTER_WICcash_Y = FILTER A by WICcash == 'Y';
        COUNT_WICcash_Y = COUNT(FILTER_WICcash_Y);
        GENERATE group, COUNT_WIC_Y + COUNT_WICcash_Y as count;
}
dump C;

Или вы можете заменить 'Y' & 'N' на 1 и 0 и сложить их.

A = LOAD 'input3.txt' AS (FMID:long,County:chararray, WIC:chararray, WICcash:chararray);
B = FOREACH A GENERATE FMID, County, (WIC == 'Y' ? 1 : 0 ) as wic, (WICcash == 'Y' ? 1 : 0 ) as wiccash;
C = GROUP B by County;
D = FOREACH C GENERATE group, SUM(B.wic) + SUM(B.wiccash) as count;
dump D;
...