我对Pig不熟悉,所以请容忍我。我有两个具有相同模式的数据源:属性Map。我知道有些属性会有一个可识别的重叠属性。例如
记录a: {"Name":{"First":"Foo", "Last":"Bar"}, "FavoriteFoods":{["Oranges", "Pizza"]}}
记录b: {"Name":{"First":"Foo", "Last":"Bar"}, "FavoriteFoods":{["Buffalo Wings"]}}
我想合并上的记录 Name
以便:
合并:
{"Name":{"First":"Foo", "Last":"Bar"}, "FavoriteFoods":{["Oranges", "Pizza", "Buffalo Wings"]}} UNION
, UNION ONSCHEMA
,和 JOIN
不要这样操作。有没有一种方法可以在pig中实现这一点,或者必须在udf中实现?
比如:
A = LOAD 'fileA.json' USING JsonLoader AS infoMap:map[];
B = LOAD 'fileB.json' USING JsonLoader AS infoMap:map[];
merged = MERGE_ON infoMap#Name, A, B;
1条答案
按热度按时间6xfqseft1#
当涉及到稍微复杂的数据转换时,pig本身是非常愚蠢的。我觉得你需要两种自定义项来完成你的任务。第一个udf将需要接受一个map并为它创建一个惟一的字符串表示。它可能类似于Map的哈希字符串表示(我们称之为gethashfrommap())。此字符串将用于连接这两个关系。第二个udf将接受两个Map并返回一个合并的Map(我们称之为mergemaps())。您的脚本将如下所示:
这里我假设您要合并的属性是一个Map。如果这可能会有所不同,您首先需要将自定义项变得更通用。它的主要目的是获得属性的唯一字符串表示形式,以便可以在该属性上连接数据集。