use*_*334 8 python schema dictionary user-defined-functions apache-pig
使用Apache PIG时从Python UDF返回字典的输出模式是什么.
我有一本字典词典,如下所示:
dict = {x:{a:1,b:2,c:3}, y:{d:1,e:3,f:9}}
Run Code Online (Sandbox Code Playgroud)
我的输出架构看起来像
@outputSchema("m:map[im:map[X:float,Y:float]]")
Run Code Online (Sandbox Code Playgroud)
**方括号,因为在Pig中我们使用[]作为此词典转换为的地图.
小智 4
如果您使用标准 jython UDF 而不是任何其他发行版(例如 mortar data 提供的 Streaming_python),您需要做的就是:
@outputSchema('m:map[]')
Run Code Online (Sandbox Code Playgroud)
键与您在 python 中设置的键相同。如果你的字典中有其他字典,你不必担心,pig 会理解它并使用以下语法:
([first#{third=inner_dict},first#outter_dict])
Run Code Online (Sandbox Code Playgroud)
从 jython UDF 将 dict 传递回 pig 有一个很大的缺点,您只能为 dict 中的所有值设置一种数据类型,这意味着如果您不设置任何数据类型,pig 将使用 bytearray 作为数据类型当处理日期或复杂结构时,这可能是一个问题。例如:
@outputSchema('m:map[chararray]')
Run Code Online (Sandbox Code Playgroud)
元组和包:
当您想要从 jython UDF 返回元组或包时,记住 python 的列表会转换为包,元组会转换为元组。例如:
列表:
@outputSchema('m:bag{chararray}')
Run Code Online (Sandbox Code Playgroud)
请记住,Pig 包中充满了元组,因此如果您想为包设置一个好的结构,您可以在包中声明一个元组,然后您将能够设置要传递的所有数据类型。例子:
@outputSchema('map_reduce:bag{t:(key:chararray,value:int,start_date:datetime,end_date:datetime)}')
Run Code Online (Sandbox Code Playgroud)
最后,元组应该在某种程度上是直观的,它们是使用 jython 时最容易使用的结构。在元组中,您可以设置任意数量的字段和任意数量的级别,只要遵循上面的示例即可。您可以在元组中声明一个元组,一个包含包和其他值的元组,等等。
我强烈建议在尝试执行复杂操作或处理复杂数据类型(例如 JSON 结构、数组和列表)时使用 Java UDF。学习曲线可能会更陡一些,但是一旦你通过了它,你的开发将会更快,程序的吞吐量也会更快。
| 归档时间: |
|
| 查看次数: |
1939 次 |
| 最近记录: |