Pig/Python için oldukça yeni ve yardıma ihtiyacım var. Finansal verileri uzlaştıran bir Pig Script yazmaya çalışıyorum. Kullanılan parametreler (grand_tot, x1, x2, ... xn) gibi bir sözdizimini takip eder, yani ilk değerin kalan değerlerin toplamına eşit olması gerektiği anlamına gelir.Python: Float değerlerini içeren bir domuz tuplesi toplanması
Tek başına Pig kullanarak bunu gerçekleştirmenin bir yolunu bilmiyorum, bu yüzden bir Python UDF yazmayı deniyorum. Domuz Python'a bir tuple geçer; x1: xn toplamı grand_tot'a eşitse, Python sayıların eşleştiğini göstermek için Pig'a "1" döndürmelidir, aksi takdirde "0" değerini döndürür. Daha sonra $ recon2 olarak geçecek
grand_tot, west_region, east_region
:
register 'myudf.py' using jython as myfuncs;
A = LOAD '$file_nm' USING PigStorage(',') AS (grand_tot,west_region,east_region,prod_line_a,prod_line_b, prod_line_c, prod_line_d);
A1 = GROUP A ALL;
B = FOREACH A1 GENERATE TOTUPLE($recon1) as flds;
C = FOREACH B GENERATE myfuncs.isReconciled(flds) AS res;
DUMP C;
$ recon1 parametre olarak geçti ve şöyle tanımlanır: Burada
Bugüne kadar ne var:grand_tot, prod_line_a, prod_line_b, prod_line_c, prod_line_d
Örnek satır ($ file_nm cinsinden) benziyor veri:
@outputSchema("result")
def isReconciled(arrTuple):
arrTemp = []
arrNew = []
string1 = ""
result = 0
## the first element of the Tuple should be the sum of remaining values
varGrandTot = arrTuple[0]
## create a new array with the remaining Tuple values
arrTemp = arrTuple[1:]
for item in arrTuple:
arrNew.append(item)
## sum the second to the nth values
varSum = sum(arrNew)
## if the first value in the tuple equals the sum of all remaining values
if varGrandTot = varSum then:
#reconciled to the penny
result = 1
else:
result = 0
return result
aldığım hata iletisi şudur: Son olarak
grand_tot,west_region,east_region,prod_line_a,prod_line_b, prod_line_c, prod_line_d
10000,4500,5500,900,2200,450,3700,2750
12500,7500,5000,3180,2770,300,3950,2300
9900,7425,2475,1320,460,3070,4630,1740
... işte ben Python UDF kodu ile yapmaya çalışıyorum budur : desteklenmeyen işlenen + için tip (ler): 'int' ve 'array.array'
Ben pek çok şey sayısal içine dizi değerlerini dönüştürmek ve böylece yüzer dönüştürmeye çalışıyor denedim özetleyebilirim, ama hiç başarı göstermeden.
Herhangi bir fikir ??? Baktığın için teşekkürler!
Bu, birkaç ayarlamayla çalışır. Python olmadan da performans arttı (bonus). Teşekkürler. – JaneQDoe
@JaneQDoe Cool.Lütfen sorunuzun cevabını cevaplayın –