如何从Pig python UDF

时间:2015-07-17 09:18:28

标签: python apache-pig jython udf

我正在尝试从我的python UDF中返回一个datetime对象,以便在Pig脚本中使用(注意我在这里简化了问题,我的实际UDF比返回当前时间更复杂但是对象返回是一样的):

Pig版本0.12.1,Hortonworks发行版。

我的UDF如下:

@outputSchema("timeNowSchema")
def time_now(dt):
        return datetime.datetime.now()

@outputSchema("timeNowSchema")
def timeNowSchema(dt):
        dt = [DataType.DATETIME]
        return SchemaUtil.newTupleSchema(dt)

但是,使用UDF时,我得到以下内容:

org.apache.pig.backend.executionengine.ExecException: ERROR 0: Non supported pig datatype found, cast failed: org.python.core.PyObjectDerived

查看负责任的org.apache.pig.scripting.jython.JythonUtils pigToPython函数,我发现尽管DataType.DATETIME是允许的返回类型,但没有明显的方法来实际执行转换。

有没有办法返回pig将作为日期时间处理的日期时间/时间戳对象?

更新: 我尝试过返回time.struct_time对象。这仍然不起作用,但至少该函数完成: 但是,猪会返回一个元组,而不是我真正想要的日期时间对象:

[python]
time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
[pig]
((2000,11,30,0,0,0,0,0,-1))

更新2 我现在正在根据fred的建议从UDF输出ISO格式的日期时间字符串。在猪源中逛了一圈之后,看起来这还不可能。

0 个答案:

没有答案