2012-10-02 65 views
0

我正在使用Python UDF,它在縮小階段導致錯誤。對於Pig的Python UDF:數據類型轉換錯誤

java.lang.ClassCastException: java.lang.Double cannot be cast to org.apache.pig.data.DataByteArray 

這裏的UDF代碼:

import math 
outputSchema("score:double") 
def confidenceLowerBound(numerator, denominator, constant): 
    raw_score = numerator * 1.0/denominator 
    normalized_interval = math.sqrt(raw_score * (1 - raw_score)/denominator) 

    wilson_score = raw_score - constant * normalized_interval 
    return wilson_score 

這是我如何調用豬UDF。

register 'confidence_interval_compute.py' using jython as pyutils; 
... 
.. 
A = FOREACH A GENERATE $0, $1, $2, $3, $4, pyutils.confidenceLowerBound($3, $4, 4) AS score PARALLEL 20; 
+0

如何A'的'的架構看起來像你遍歷?你使用哪種豬版本? –

+3

我希望這是一個拼寫錯誤,但是你在'outputSchema'之前缺少了@(例如'@outputSchema(「score:double」)'。如果這個缺失,裝飾器將不會被調用,這意味着Pig不會知道輸出是雙倍的。 –

回答

0

正如@Ian Stevents在評論中指出的那樣,這是因爲你在修飾器中有一個錯字。

您應該使用

@outputSchema("score:double")