sparkCore RDD join
2016-07-13 00:00
387 查看
1.目的
找出人际关系圈中的三角环状关系(A->B,B->C,C->A)2.素材
text1.txt1 tom 2 jack friend 2 jack 3 sala friend 3 sala 1 tom friend 4 joy 1 tom friend 1 tom 4 joy friend 1 tom 4 joy friend 2 jack 5 Missing friend
3.代码
package test import org.apache.log4j.{Level, Logger} import org.apache.spark.{SparkContext, SparkConf} import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD object join { def main(args: Array[String]) { //屏蔽日志 Logger.getLogger("org.apache.spark").setLevel(Level.WARN) Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF) //设置运行环境 val conf = new SparkConf().setAppName("test1").setMaster("local") val sc = new SparkContext(conf) //引入text文件 val File:RDD[String] = sc.textFile("e:\\text1.txt") //创建两个列反向的RDD //aid1,aid2 val edgea = File.map { e => val fields = e.split(" ") (fields(0).toLong,fields(2).toLong) } //bid1,bid2 val edged = File.map { e => val fields = e.split(" ") (fields(2).toLong,fields(0).toLong) } //RDD一次关联 val edge_rel=edgea.join(edged).map{case (aid1,(aid2,did2))=>(did2,(aid1,aid2))} println("edge_rel:") println(edge_rel.collect.mkString("\n")) //RDD二次关联 val edge_final=edge_rel.join(edged).map{case (aid1,((aid2,aid3),aid4))=>(aid4,aid1,aid2,aid3)} println("edge_final:") println(edge_final.collect.mkString("\n")) //筛选有向环 val edge_match=edge_final.filter{case (id1,id2,id3,id4)=>id1==id4} println("edge_match:") println(edge_match.collect.mkString("\n")) //最终环状结构 val edge_tri=edge_match.map{case (id1,id2,id3,id4)=>(id1,id2,id3)} println("edge_tri:") println(edge_tri.collect.mkString("\n")) //环状结构去重 val edge_unique=edge_tri.filter{case (id1,id2,id3)=>id1<id2 & id1<id3} println("edge_unique:") println(edge_unique.collect.mkString("\n")) sc.stop() } }
4.输出
edge_rel: (1,(4,1)) (1,(4,1)) (3,(1,2)) (4,(1,2)) (3,(1,4)) (4,(1,4)) (3,(1,4)) (4,(1,4)) (2,(3,1)) (1,(2,3)) (1,(2,5)) edge_final: (1,4,1,2) (1,4,1,2) (1,4,1,4) (1,4,1,4) (1,4,1,4) (1,4,1,4) (3,1,4,1) (4,1,4,1) (3,1,4,1) (4,1,4,1) (3,1,2,3) (4,1,2,3) (3,1,2,5) (4,1,2,5) (2,3,1,2) (2,3,1,4) (2,3,1,4) (1,2,3,1) edge_match: (3,1,2,3) (2,3,1,2) (1,2,3,1) edge_tri: (3,1,2) (2,3,1) (1,2,3) edge_unique: (1,2,3)
相关文章推荐
- Spark RDD API详解(一) Map和Reduce
- 使用spark和spark mllib进行股票预测
- Spark随谈——开发指南(译)
- Spark,一种快速数据分析替代方案
- sql server几种Join的区别测试方法
- MySQL中join语句的基本使用教程及其字段对性能的影响
- SQL 外链接操作小结 inner join left join right join
- SQL语句的并集UNION 交集JOIN(内连接,外连接)等介绍
- 利用CSS3新特性创建透明边框三角
- 浅谈SQL Server中的三种物理连接操作(性能比较)
- oracle中left join和right join的区别浅谈
- MySQL JOIN之完全用法
- mysql多表join时候update更新数据的方法
- SQL中的left join right join
- SQL的Join使用图解教程
- SQL Join的一些总结(实例)
- union这个连接是有什么用的和INNER JOIN有什么区别
- python分割和拼接字符串
- C#多线程之Thread中Thread.Join()函数用法分析