用SparkSQL引入了2个DataFrame的数据集,暂叫拦截数据集和信息数据集,用拦截数据集中的每一行值(其实只有一列),去匹配信息数据集(也是只有一列),得出这行结果的命中次数,然后将这个命中次数和这条拦截数据和拦截到的信息,再用DataFrame在写回数据库。
数据集的循环是不能嵌套的,外部循环进入不到内部循环中,所以上述思想就达不到目的,求个能够达到这个目的的实现方式。以下是部分代码。
可以换一个解法。
你原来的数据,假设是列A,和列B。各自再加上一列标签,形成两组kv键值对,比如A变成
a1,1
a2,1
a3,1
....
an,1
列B变成
b1,2
b2,2
b3,2
....
bn,2
然后将两组数据union在一起(上下合并),变成
a1,1
...
an,1
b1,2
...
bn,2
第一列命名为key,第二列命名为value
再用dataframe的groupby和agg方法
data.groupBy("key").agg(countUDAF("value",1),countUDAF("value",2))
这里原先的count,sum,max等聚合方法不满足你需要,你要自定义实现一个UDAF方法,统计同一个key下,有几个1,几个2
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。