python - 如何: Python UDF dictionary return schema in PIG

标签 python dictionary schema user-defined-functions apache-pig

使用 Apache PIG 时从 Python UDF 返回字典的输出模式是什么。

我有一个字典的字典,像这样:

dict = {x:{a:1,b:2,c:3}, y:{d:1,e:3,f:9}}

我的输出模式看起来像

@outputSchema("m:map[im:map[X:float,Y:float]]") 

** 方括号,因为在 Pig 中我们使用 [] 作为字典转换成的 map 。

最佳答案

如果您使用标准的 jython UDF 而不是任何其他发行版,例如 mortar data 提供的 streaming_python,您需要做的就是:

@outputSchema('m:map[]') 

key 将与您在 python 中设置的相同。如果你的 dict 中有其他词典,你不必担心,pig 会理解它并使用以下语法:

([first#{third=inner_dict},first#outter_dict])

将 dict 从 jython UDF 传回 pig 有一个很大的缺点,您只能为 dict 中的所有值设置一种数据类型,这意味着如果您不设置任何数据类型,pig 将使用 bytearray 作为数据类型,这在处理日期或复杂结构时可能是个问题。例如:

@outputSchema('m:map[chararray]')

元组和包:

当您想从 jython UDF 将元组或包返回给 pig 时,记住 python 的列表转换为包,元组转换为元组是很有用的。例如:

列表:

@outputSchema('m:bag{chararray}')

请记住,Pig 包中充满了元组,因此如果您想为您的包设置一个漂亮的结构,您可以在包内声明一个元组,然后您将能够设置要传递的所有数据类型。示例:

@outputSchema('map_reduce:bag{t:(key:chararray,value:int,start_date:datetime,end_date:datetime)}')

最后,元组在某种程度上应该是直观的,它们是使用 jython 时最容易使用的结构。在一个元组中,您可以设置任意数量的字段和任意数量的级别,只要您遵循上面的示例即可。您可以在一个元组中声明一个元组,一个具有包和其他值的元组等。

我强烈建议在尝试执行复杂操作或处理复杂数据类型(如 JSON 结构、数组和列表)时使用 Java UDF。学习曲线可能会稍微陡峭一些,但一旦通过,您的开发速度就会快得多,程序的吞吐量也会提高。

关于python - 如何: Python UDF dictionary return schema in PIG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13350583/

相关文章:

python - Pytest 在哪里存储预期数据

arrays - 在 Swift 中使用 .filter 和字典数组

node.js - Mongoose OR 模式验证

graphql - amplify api 推送不会更新云中的架构并在本地恢复

python - 匹配两个部分匹配到另一个列表的字符串列表

python - 如何从 PyQt 中的 QListWidget 更新与 QListWidgetItem 关联的数据?

python套接字,无效参数

python - 将包含一些标量和一些数组值的字典写入 csv

python - 在python中将多个值绘制到一个键

xsd - 如何判断 XSD 文件中的 XML 元素是否被标记为必需