开发者社区> 问答> 正文

开发新手,SparkSQL有2个数据集,思想是循环嵌套求出匹配值。求其能够实现的方式。

用SparkSQL引入了2个DataFrame的数据集,暂叫拦截数据集和信息数据集,用拦截数据集中的每一行值(其实只有一列),去匹配信息数据集(也是只有一列),得出这行结果的命中次数,然后将这个命中次数和这条拦截数据和拦截到的信息,再用DataFrame在写回数据库。
数据集的循环是不能嵌套的,外部循环进入不到内部循环中,所以上述思想就达不到目的,求个能够达到这个目的的实现方式。以下是部分代码。
_8_42_A_UIM0LW5CVOLIFAH
_YFGL7C7P_X_D_RBYF8I_MQ

展开
收起
精霊玉 2018-01-15 16:07:28 4013 0
1 条回答
写回答
取消 提交回答
  • 可以换一个解法。
    你原来的数据,假设是列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

    2019-07-17 21:54:03
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载