一种基于多阶段MapReduce模型的纳税人偷漏税嫌疑群组检测方法_4

文档序号:9811173阅读:来源:国知局
rade(i));
[0167] Step7:若node-O-L不为空,则从中任选一个节点,令i = i+Ι,转Step4;若node-O-L 为空,则输出(subgraph,trade),即利益前件网络Ante-TN中所有的极大弱连通子图及其对 应的交易关系边所构成的二元组。
[0168] 以图7(b)为例,利用上述的算法,共得到两个极大弱连通子图,其中,SUbgraph(l) 表示为{(1^1,(:1),(1^1,〇2),〇^1,〇4),〇^,〇3),〇^3,〇5),((:1,〇3),(〇2,〇5)},对应的杜&(16 (1)表示为{(〇2,〇4),(〇3,〇5)}; 8诎8瓜?11(2)表示为{〇^,〇6),〇^,〇7),(81,〇7),(81,〇8), (L5,C8)},对应的trade(2)表示为{(C6,C7),(C7,C8),(C6,C8)},即二元组(subgraph, trade)包含两个元素,分别为(subgraph (1),trade (1))和(subgraph (2),trade (2))。
[0169] (五)基于多阶段MapReduce模型的纳税人偷漏税嫌疑群组发现
[0170]本方法在使用MapReduce架构实现纳税人偷漏税嫌疑群组发现时,主要涉及以下 四个MapReduce过程,包括:
[0171 ] ①构建模式树(第1个MapReduce过程)
[0172] Stepl :Maperl端以二元组(subgraph,trade)为输入,并按照Hadoop分布式文件系 统(HDFS)的块大小(缺省设置为64MB)对其进行分片,设分片个数为%,则每个分片所包含 的极大弱连通子图的个数为mi = Νιι/Μι,其中Νιι为subgraph中的极大弱连通子图的总数,Μι 为Maperl任务的个数,然后,作业调度器Jobl将每个分片分别交给其对应的一个Maperl任 务进行处理;
[0173] Step2:调用Maperl任务的方法函数遍历分片中的subgraph(i),计算subgraph(i) 中每个节点Vm的入度indegreem和出度outdegreem,将subgraph(i)中所有节点的集合表示 为丫(:0 = 1>1!1|111=1,2,'",1},将81^8以口11(;〇中所有节点的入度;[11(16 816 6111和出度 outdegreem的集合分另lj表示为indegree(i) = {indegreem| m= 1,2,…,NV}和outdegree(i) ={outdegreem|m = 1,2,…,NV},其中,Nv表示subgraph(i )中的节点总数。构建三元组(v (i ),indegree (i ),outdegree (i )),首先将v( i)中的各个节点按其相应的入度indegree (i) 由小到大进行排序,然后将具有相同入度的节点按其出度outdegree(i)由大到小进行排 序,得到排序之后的三元组(i),indegree' (i),outdegree' (i)),用sorted3Tuple( i)表 不,并生成键/值对〈i,sorted3Tuple(i )>,存入集合keyValuesListl 中,keyValuesListl暂 时放在本地的内存缓冲区,若缓冲区存满,则将缓冲区的数据写入本地创建的溢写文件中; [0 174] Step3:对于keyValuesListl中的所有键/值对,首先在本地进行合并,并按键的值 进行排序,然后通过分区类?81'1:;[1:;[01161'1将1^5^3111681^81:1中的键/值对分为1?1个分区,每 个分区包含的键/值对的个数为rmrNu/Ri,其中N12为keyValuesListl中的键/值对的总 数,Ri为Reducer 1任务的个数,每个分区分别交给其对应的一个Reducer 1任务进行处理; [0175] Step4:Reducerl任务接收Maperl任务传来的有序数据,并顺序读取,把具有相同 键的键/值对合并为一类,形成新的键/值对<i,sorted3TupleList>,其中, sorted3TupleList为同一个键所对应的所有三元组sorted3Tuple(i)的集合,合并后的值 传给Reducerl任务的方法函数,执行对应的算法;
[0176] Step5:RedUCerl任务的方法函数构建模式树的过程如下,其中,所有的模式树存 入patternTreeList= {patternTree(i) | i = l,2,…,num}中:
[0177] Step5.1:对键值为i的键/值对<i,sorted3TupleList>,仓丨」建一个根节点rooti;
[0178] 5七6口5.2:遍历所有输入的〈;!_,8〇1^6(131'即161^8〇,对于8〇1^6(131'叩161^8七中的每 个三元组sorted3Tuple(i),根据indegree 7 (i)找到v7 (i)中所有入度为0的节点,存入集合 startNodes(i)中,同时,将rooti到startNodes(i)中的节点的所有边存入patternTree(i) 中;
[0179] Step5.3:根据outdegree7 (i)判断startNodes(i)中是否存在出度不为0的节点, 若存在,转Step5.4,若不存在,则输出patternTree(i),存入模式树列表patternTreeList 中;
[0180] Step5.4:遍历subgraph(i)和trade(i),判断是否存在以这些出度不为0的节点为 起始节点的边,若存在,则将这些边存入集合arcs(i)中,转Step5.5,若不存在,则输出 patternTree(i),存入模式树列表patternTreeList中;
[0181] Step5.5:将arcs(i)中的边的终止节点存入集合endNodes(i)中,并将arcs(i)中 的边存入口3"61'111>66(;0中,然后令8七&1^?^〇(168(;0=611(1?^〇(168(;0,并清空&1'〇8(;0和 endNodes(i),转Step5·4。
[0182] 其中,上述Step2中所述的计算subgraph(i)中的每个节点vm的入度indegreem和出 度outdegreem可由以下MapReduce过程实现:
[0183] Step2.1 :Maper7端把subgraph(i)按照HDFS的块大小划分为M7个分片,每个分片 包含的边的个数为m7 =Ni7 /R7,其中Νι7为subgraph(i)中的边的总数,M7为Maper 7任务的 个数,然后,作业调度器Jobl'将每个分片分别交给其对应的一个MapeV任务进行处理; [0 184] Step2.2:对分片中的每条边e = (vm,vn)调用Maper7任务的方法函数,得到入度为 〇、出度为1的节点v m,以及入度为1、出度为0的节点vn,分别生成键/值对<vm,0>、〈v m,l>,& 及〇11,1>、〇11,0>,将入度相关的键/值对〇心0>和〇 11,1>存入入度表1111^7¥&11^^#中, 将出度相关的键/值对〈Vm,1>和<v n,0>存入出度表outKeyValuesList中,inKeyValuesList 和outKeyValuesList暂时存放在本地的内存缓冲区,若缓冲区存满,则将缓冲区的数据写 入本地创建的溢写文件中;
[0185] Step2.3:对于 inKeyValuesList和outKeyValuesList 中的所有键/值对,首先在本 地进行合并,并按键的值进行排序,然后分区类Part it ioner7将inKeyValuesList和 outKeyValuesList中的键/值对分为R7个分区,每个分区包含的键/值对的个数为Π27 =N27 / R7,其中N27 为inKeyValuesList或outKeyValuesList中的键/值对的总数,R7 为Reducer7 任 务的个数,每个分区分别交给其对应的一个Reducer7任务进行处理;
[0186] Step2.4: Reducer7任务接收MapeV任务传来的有序数据,顺序读取入度表与出度 表中的数据,并分别将入度表和出度表中具有相同键(如vm)的键/值对合并为一类,形成新 的键 / 值对〈vm,VminList〉和<vm,VmOUtList〉,其中,VminList 和VmOUtList 分别为同一个键vm 所对应的所有入度和出度值的集合,合并后的值传给Reduced任务的方法函数,执行对应 的算法;
[0187] Step2.5:对同一个键vm所对应的VminList和VmOUtList调用Reducer7任务的方法 函数,分别将VminList和VmOUtList中的所有值相加,得到节点v m的入度indegreem和出度 outdegreemo
[0188] 以(4)中生成的二元组(subgraph,trade) = {(subgraph(l),trade(l)), (subgraph (2),trade (2))}为例,作为第一个MapReduce过程(见图8第一行)的输入,经过上 述步骤后,输出的模式树列表patternTreeList中包含两个模式树patternTree( 1)和 patternTree(2),其中patternTree(l)表示为{(LI,C1),(LI,C2),(LI,C4),(L2,C3),(L3, 05),(<:1,〇3),(〇2,〇5),(〇2,〇4),(〇3,〇5)};口&?6?11'^6(2)表示为{(1^4,〇6),(1^4,〇7), (B1,C7),(B1,C8),(L5,C8),(C6,C7),(C7,C8),(C6,C8)}。
[0189] ②生成模式库(第2个MapReduce过程)
[0190] Stepl :Maper2端将第1个MapReduce过程输出的模式树列表patternTreeList按照 HDFS的块大小划分为M2个分片,每个分片包含的模式树的个数为Π 2? = Ν2?/Μ2,其中N2i为 patternTreeList中的模式树的总数,M2为Maper2任务的个数,然后,作业调度器Job2将每 个分片分别交给其对应的一个Maper2任务进行处理;
[0191 ] Step2:调用Maper2任务的方法函数从每个模式树的根节点rooti开始遍历,遍历 历经节点Ar,若遇到出度为0的节点Ar,则生成模式(rooti,Ai,…,Ar),用oldPatternBasel表 示,并形成键/值对〈1'0〇1^,〇1(1?31^61'111^861>,若首次到达某条交易边的终止节点¥,则生 成模式(rooti,Ai,…,A r) - v,用 oldPatternBase2 表示,并形成键/值对〈rooti, oldPatternBase2>,将上述两种键/值对均存入集合oldKeyValuesList中, oldKeyValuesList暂时放在本地的内存缓冲区,若缓冲区存满,则将缓冲区的数据写入本 地创建的溢写文件中;
[0?92] Step3:对于〇 ldKeyValuesLi st中的所有键/值对,首先在本地进行合并,并按键的 值进行排序,然后分区类Part it ioner2将oldKeyValuesList中的键/值对分为R2个分区,每 个分区包含的键/值对的个数为n22 = N22/R2,其中N22为oldKeyValuesList中的键/值对的总 数,R2为Reducer2任务的个数,每个分区分别交给其对应的一个Reducer2任务进行处理; [0193] Step4:ReduCer2任务接收Maper2任务传来的有序数据并顺序读取,把具有相同键 的键/值对合并为一类,形成新的键/值对<rooti,oldPatternBaseList>,其中, oldPatternBaseList为同一个键所对应的模式(oldPatternBasel,oldPatternBase2)的集 合,合并后的值传给Reducer 2任务的方法函数,执行对应的算法;
[0?94] S t e p 5 :调用R e d u c e r 2任务的方法函数遍历所有输入的〈r ο 〇 t i, oldPatternBaseList〉,对于 oldPatternBaseList 中的每个模式,包括 oldPatternBasel和 〇1(1?31^61'111^862,删掉其中的根节点1'0〇1^,生成模式(41,,",41〇和(41,",41〇4¥,分别用 patternBasel 与 patternBase2 表不,均存入模式列表 patternBaseList 中。
[0195] 以①中生成的模式树列表patternTreeList = {patternTree(1),patternTree ⑵}为例,作为第二个MapReduce过程(见图8第二行)的输入,经过上述步骤后,输出的模式 列表patternBaseList为{(LI,C1,C3)-C5,(LI,C2,C5),(LI,C2)-C4,(LI,C4),(L2,C3) - C5,(L3,C5),(L4,C6)^C7,(L4,C6)^C8,(L4,C7)^C8,(L5,C8),(B1,C7)^C8,(B1,C8)}, 共包含12条模式。
[0196] ③生成键值对列表(第3个MapReduce过程)
[0197] Stepl :Maper3端将第2个MapReduce过程输出的模式列表patternBaseList按照 HDFS的块大小划分为M3个分片,每个分片包含的模式的个数为Π 3? = Ν3?/Μ3,其中N3i为 patternBaseList中的模式的总数,M3为Maper3任务的个数,然后,作业调度器Job3将每个 分片分别交给其对应的一个Maper3任务进行处理;
[0198] Step2:调用Maper3任务的方法函数提取每个模式patternBase(包括 patternBasel和patternBase2)的前件中的所有元素(Αι,…,Ar)及后件元素 v分别作为键, 生成Νι个键/值对<Ai,patternBase>,…,〈Ar,patternBase〉,〈v,patternBase〉,其中Νι为 patternBase中的节点个数,将这些键/值对存入集合keyValuesList3中,key ValuesList3 暂时放在本地的内存缓冲区,若缓冲区存满,则将缓冲区的数据写入本地创建的溢写文件 中;
[0199] Step3:对于keyValuesList3中的所有键/值对,首先在本地进行合并,并按键的值 进行排序,然后分区类?&1"1:;[1:;[011613将1^5^3111681^8七3中的键/值对分为1?3个分区,每个分 区包含的键/值对的个数为n 32 = N32/R3,其中N32为keyValuesList3中的键/值对的总数,R 3为 Reducer 3任务的个数,每个分区分别交给其对应的一个Reducer 3任务进行处理;
[0200] Step4:ReduCer3任务接收Maper3任务传来的有序数据并顺序读取,将具有相同键 W(包括键Αι,…,Ar,v)的键/值对合并为一类,形成新的键/值对<w,newPatternBaseList>, 其中,newPatternBaseList为同一个键所对应的所有值(模式)的集合,合并后的值传给 Reducer3任务的方法函数,执行对应的算法;
[0201 ] Step5:调用Reducer3任务的方法函数遍历所有输入的<w, newPatternBaseList〉, 对于newPatternBaseList中的每个模式patternBase,若w为其前件元素,则将patternBase 放入前件列表r_patternBaseList中;若w为其后件元素,则将patternBase放入后件列表v_ patternBaseList 中,最后,对每一个键¥生成键/值对〈'\¥,1'_。&1^61'1113&861^81:>或〈'\¥,¥_ patternBaseList>〇
[0202] 为便于理解上述过程,以②中生成的模式列表patternBaseList中的模式(LI,C1, C3 )-C5和(L
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1