我正在尝试从我的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格式的日期时间字符串。在猪源中逛了一圈之后,看起来这还不可能。