Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从python UDF返回datetime_Python_Apache Pig_Jython_Udf - Fatal编程技术网

如何从python UDF返回datetime

如何从python UDF返回datetime,python,apache-pig,jython,udf,Python,Apache Pig,Jython,Udf,我试图从python UDF中返回一个datetime对象,以便在Pig脚本中使用(注意,我在这里简化了问题,我的实际UDF做的事情比返回当前时间复杂得多,但返回的对象是相同的): Pig版本0.12.1,Hortonworks发行版 我的自定义项如下: @outputSchema("timeNowSchema") def time_now(dt): return datetime.datetime.now() @outputSchema("timeNowSchema") de

我试图从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)
但是,当使用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是允许的返回类型

有没有办法返回一个datetime/timestamp对象,pig将其作为datetime处理

更新: 我尝试返回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字符串。在调查了猪的来源之后,这看起来还不可能

我不知道。您可以返回一个带有ISO格式日期的字符串,然后用Pig进行解析。@Fred-谢谢您的建议。我已经试过了,它可以作为一种解决办法,但不是很干净。我更愿意以本机方式输出,但我会等着看是否有其他建议。您是否尝试过显式声明返回类型?像
@outputSchema(“timeNowSchema:datetime”)
@LiMuBei恐怕也不行。谢谢你的建议,我不知道。您可以返回一个带有ISO格式日期的字符串,然后用Pig进行解析。@Fred-谢谢您的建议。我已经试过了,它可以作为一种解决办法,但不是很干净。我更愿意以本机方式输出,但我会等着看是否有其他建议。您是否尝试过显式声明返回类型?像
@outputSchema(“timeNowSchema:datetime”)
@LiMuBei恐怕也不行。谢谢你的建议。