数据类型不匹配导致比较失败?Pig中的Python-UDF

数据类型不匹配导致比较失败?Pig中的Python-UDF,python,hadoop,apache-pig,cdf,Python,Hadoop,Apache Pig,Cdf,我在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

我在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
import org.apache.pig.impl.logicalayer.schema.SchemaUtil作为SchemaUtil导入
@outputSchema(“adj:float”)
def cumRelFreqAdj(三角洲):
#创建增量为0.01的箱子
a=[i*-0.01,适用于范围(100)内的i]
a=a[1:len(a)]
b=[i*0.01表示范围(101)内的i]
a、 延长(b)
a、 排序()
垃圾箱=a
#建立累积相对频率分布
cumfreq=[0]*200
对于三角洲中的三角洲:
对于范围内的料仓(len(料仓)):
如果增量为0.11:#10%ile
调整=相对频率[0]+0.05
打破
返回

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

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

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

delta = list(delta)[0]

在上面的第16行和第17行之间,拉出作为元组内容的浮点型数据元素。那么第18行的比较就可以了。

另外请注意:我现在不选择使用numpy/scipy库。