2016-05-09 14 views
0

私は袋をPythonに渡しており、Python udfからレコードを取得する予定です。私はOutputschemaで何か間違ったことをしていて、各列をTupleとして取得しているに違いありません。どんな助けでも大歓迎です。PigのPython UDFはレコードを返しません

豚コード:

REGISTER 'priority.py' using jython as callme 
A = LOAD 'addr_input/addr.dat' USING PigStorage(',') AS (A : chararray, B :chararray , C: chararray , ID : chararray, ID_TYPE : chararray); 

B = DISTINCT A; 
Z= GROUP B BY (A,B,C); 
O = FOREACH Z GENERATE callme.unique_list($1) ; 
DUMP O; 

Pythonのコード:

({(aa),(bb),(cc),(1),(zip)}) 
({(lll),(ccc),(ddd),(6),(city)}) 
({(lll),(ccc),(xxx),(7),(country)}) 
({(mmm),(nnn),(cc),(4),(zip)}) 

を---すべての列はタプルとして来ている:私は取得しています

@outputSchema('relationships:{t:(A : chararray, B :chararray , C: chararray , ID : chararray, ID_TYPE : chararray)}') 
def unique_list(input): 
my_list = list(input) 
print(my_list) 
last_list = [] 
zipcnt = -1 
citicnt = -1 
countycnt = -1 
statecnt = -1 
return_list_zip = [] 
return_list_city = [] 
return_list_county = [] 
return_list_state = [] 
return_list_country = [] 
for j in range(len(my_list)): 
     if(my_list[j][4]) == "zip": 
     zipcnt = len(my_list) 
     return_list_zip = list(my_list[j]) 
     continue 
     elif (my_list[j][4] == 'city' and zipcnt == -1): 
      citicnt = len(my_list) 
      return_list_city = list(my_list[j]) 
      continue 

     elif (my_list[j][4] == 'county' and zipcnt == -1 and citicnt == -1): 
      countycnt = len(my_list) 
      return_list_county = list(my_list[j]) 
      continue 
     elif (my_list[j][4] == 'state'and zipcnt == -1 and citicnt == -1 and countycnt == -1): 
      statecnt = len(my_list) 
      return_list_state = list(my_list[j]) 
      continue 
     elif (my_list[j][4] == 'country'and zipcnt == -1 and citicnt == -1 and countycnt == -1 and statecnt == -1): 
      return_list_country = list(my_list[j]) 
      continue 
if(zipcnt != -1): 
    return_list = return_list_zip 
elif(citicnt != -1): 
    return_list = return_list_city 
elif(countycnt != -1): 
    return_list = return_list_county 
elif (statecnt != -1): 
    return_list = return_list_state 
else: 
    return_list = return_list_country 
return return_list 

出力!

{aa,bb,cc,1,zip} 
    {lll,ccc,ddd,6,city} 

あなたの助けがはるかに高く評価されています。私は期待してい

出力。

+0

サンプル入力データを提供できますか? –

+0

@VikasMadhusudana:サンプル入力:AA、BB、CC、1、 AA、BB、CC、2通り MMM、NNN、CC、3、郡 MMM、NNN、CC、4ファスナー、 MMMファスナー、NNN 、cc、5、状態 lll、ccc、ddd、6、都市 lll、ccc、xxx、7、国 – SanBan

答えて

0

バッグはタプルの集合です。あなたが得ることが有効であると答える。

+0

:出力は、元のメタデータに似ています。どのように達成することができますか?ありがとう。 – SanBan

0

あなたは、これが出力

(aa,bb,cc,1,zip) 
(aa,bb,cc,2,street) 
(lll,ccc,ddd,6,city) 
(lll,ccc,xxx,7,country) 
(mmm,nnn,cc,3,county) 
(mmm,nnn,cc,4,zip) 
(mmm,nnn,cc,5,state) 

で与えた入力の場合

A = LOAD 'addr_input/addr.dat' USING PigStorage(',') AS (A : chararray, B :chararray , C: chararray , ID : chararray, ID_TYPE : chararray); 

B = DISTINCT A; 
Z= GROUP B BY (A,B,C); 
DESCRIBE Z 
O = foreach Z { f1 = foreach B generate $0,$1,$2,$3,$4; generate flatten(f1);} 
dump O 

を試してみては、あなたが探しているものを、このですか?

関連する問題