数据类型不匹配导致比较失败?Python UDF in Pig.



我在使用 Python UDF 时遇到问题,无法在 Pig 脚本中使用。我相信问题是我假设我的输入增量是它实际上没有的格式,但我不确定如何解决它(Python n00b)。

注意:在Cloudera(cdh4.3)发行版的Hadoop v.2.0.0,Pig v.0.11.0,Python 2.4.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

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

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

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

delta = list(delta)[0]

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

相关内容

  • 没有找到相关文章

最新更新