我有两个 string
列包含 key/value
配对变量。像这样:
column1 column2
a:1,b:2,c:3 a:5,c:3
a:12,b:4 a:9,b:3,d:5
如何将这些值(在现实生活中,我不知道我有多少个键,有些键只能在一列中找到)按特定键求和以得到:
column12
a:6,b:2,c:6,d:0
a:21,b:7,c:0,d:5
或者这个:
a b c d
6 2 6 0
21 7 0 5
谢谢你的帮助!
3条答案
按热度按时间oyjwcjzk1#
这里有一个解决方案。这是一个有点黑客,但将工作,无论你有多少钥匙。
udf0.py版本
udf1.py版本
配置单元查询:
输出:
说明:
第一个udf将获取您的字符串,将其转换为python字典并更新键(即将具有匹配键的值添加到一起)。因为您不知道实际的键,所以需要从每个字典中提取键(
map_keys()
在配置单元查询中),分解表,然后将它们收集回唯一的集合。现在,你可以在任何字典里找到所有可能的键。然后,您可以使用第二个udf导入在第一个udf中创建的字典,检查每个键是否存在,如果不存在,则为其值设置一个零。iyfjxgzm2#
假设每一行都有一个唯一的标识符“id”,下面的查询
应该有用。
k97glaaz3#
其中一种方法是使用hcatalog编写自定义mapreduce代码。
下面的mr获取表1的输入列,并将结果列写入表2中(不需要reducer,因为逻辑在Map器中处理)
如何使用hcatalog运行mr(参考链接):配置单元手册
希望这有帮助。