基于Spark的并行信任进化算法
2021-03-16黄冬平周夏冰刘冠峰
黄冬平 周夏冰 刘冠峰
1(苏州大学计算机科学与技术学院 江苏 苏州 215006)
2(上交所技术有限责任公司 上海 200120)
0 引 言
随着互联网的飞速发展,电子商务平台在人们的生活中扮演着越来越重要的角色,在以信任为导向的电子商务平台中,如亚马逊、Epinions等,买家在完成一笔交易后,可以根据自己的购买体验写下相应的评价,这些评价对所有人都是可见的,买家也可以根据自己的购买体验对已有的评价进行评分:有帮助、无帮助等[1]。大多数潜在买家在购买之前都会参考这些买家(advisors)的评价,根据卖家声誉的好坏决定是否进行购买。然而,有些不诚实的买家(attackers)会提供虚假评价,造成错误推荐。Jiang等[2]提出的信任进化(MET)算法对于鉴别attackers有着非常好的效果,但是当数据规模较大时,MET算法的运算效率很低。而并行计算框架的出现,成为解决这一问题的重要途径。
现今主流的并行计算框架有MapReduce、Spark等。相比于MapReduce,Spark是基于内存的编程框架,中间结果可存储在内存中,降低了数据交换的访问延迟,因而Spark运算速度要高于MapReduce。Spark的操作都是基于弹性分布式数据集(RDD)进行的,且自带丰富的算子,如map、reduce、filter、collect等,只需用很少的代码就可以实现复杂的并行操作,相比于MapReduce来说,Spark的运算效率更高、代码更灵活。
RDD默认的分区函数为HashPartitioner,该函数根据key的哈希值对节点个数求余的结果进行分区,当某个key数量较多时,很容易将大量具有相同key的数据分布到同一个分区里。这种情况称为数据倾斜,而RDD的执行时间为所有分区计算时间的最大值[3],数据倾斜的存在不仅仅会影响运行效率,严重情况下会导致task运行失败[4]。……
