1

我正在尝试从我的 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 作为允许的返回类型。

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

更新:我尝试返回一个 time.struct_time 对象。这仍然不起作用,尽管至少函数完成了:但是,pig 返回了一个元组,而不是我真正想要的 datetime 对象:

[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 格式的日期时间字符串。在猪源里摸索了一下,这似乎还不可能。

4

0 回答 0