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

标签 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 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)}。

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

delta = list(delta)[0]

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

关于python - 数据类型不匹配导致比较失败? Pig中的Python UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19211728/

相关文章:

python - Boost Python 3迭代字典

python字符串到函数: globals() vs sys.模块与字典

java - 将Json Flat文件从本地复制到HDFS

hadoop - mahout 在 hadoop 上的 kmeans 聚类错误

hadoop - Hadoop 大数据中的复制因子

hadoop - org.apache.pig.piggybank.storage.apachelog.CombinedLogLoader不会以组合文件格式加载文件

python - 将Pig嵌入Python

python - 扁平化 python 数据框中的条目,例如 Apache PIG 包

python - 安装 keras 后,anaconda 提示符始终以这些命令集启动

python - 在 python 中如何将 ascii 表转换为适合表?