如何从pig python udf返回datetime

pod7payv  于 2021-06-25  发布在  Pig
关注(0)|答案(0)|浏览(284)

我试图从python udf中返回一个datetime对象,以便在pig脚本中使用(注意,我在这里简化了问题,我的实际udf做了一些比返回当前时间复杂得多的事情,但是返回的对象是相同的):
pig版本0.12.1,hortonworks发行版。
我的自定义项如下:

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

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

但是,在使用自定义项时,我得到以下结果:

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是允许的returntype。
有没有方法返回pig将作为datetime处理的datetime/timestamp对象?
更新:我尝试返回time.struct\u 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格式的datetime字符串。在Pig源上翻了一番之后,看起来这还不可能。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题