Pig スクリプトで使用する Python UDF に問題があります。問題は、入力デルタが実際には存在しない形式であると想定したことだと思いますが、それを修正する方法がわかりません(Python n00b)。
注: Hadoop v.2.0.0、Pig v.0.11.0、Python 2.4.3 の Cloudera (cdh4.3) ディストリビューション。
import org.apache.pig.impl.logicalLayer.schema.SchemaUtil as SchemaUtil
@outputSchema("adj:float")
def cumRelFreqAdj(deltas):
# create bins of increment 0.01
a = [i*-0.01 for i in range(100)]
a = a[1:len(a)]
b = [i*0.01 for i in range(101)]
a.extend(b)
a.sort()
bins = a
# build cumulative relative frequency distribution
cumfreq = [0]*200
for delta in deltas:
for bin in range(len(bins)):
if delta <= bins[bin]:
cumfreq[bin] += 1
cumrelfreq = [float(cumfreq[i]) / max(cumfreq) for i in range(len(cumfreq))]
crf = zip(bins, cumrelfreq)
for relfreq in crf[:]:
if relfreq[1] > 0.11: # 10%ile
adj = relfreq[0] + 0.05
break
return adj
最初に入力をリストに変換する必要がありますか?