0

我的 Python UDF 在 Pig 脚本中使用时遇到问题。我认为问题在于我假设我的输入增量的格式实际上并不存在,但我不确定如何修复它(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

我需要先将输入转换为列表吗?

4

1 回答 1

0

回答了我自己的问题。Pig 的输入是一袋元组。在我的例子中,每个元组都有一个元素,例如:{(-0.01), (-0.03), (0.00001), (-0.2383), (0.158)}。

因此,为了将它与另一个列表bins中的浮点型元素进行比较,我需要插入类似的内容:

delta = list(delta)[0]

在上面的第 16 行和第 17 行之间,拉出作为元组内容的浮点型数据元素。然后第 18 行的比较将起作用。

于 2013-10-06T17:56:18.413 回答