Massive-Data-Process-Homework-4

在Dryad论文中,有以下的查询语句,在上课的时候已经详细说明了如何将SQL语句转换成DAG1(被称为是Schema DAG,类似C++里面的class),之后再将DAG1与具体的数据分布结合在一起,形成DAG2(被称为是Instance DAG,类似C++里面的Object)。课堂中的查询语句是:

1
2
3
4
5
6
7
8
9
10
11
12
13
select distinct p.objID
from photoObjAll p
join neighbors n — call this join “X”
on p.objID = n.objID
and n.objID < n.neighborObjID
and p.mode = 1
join photoObjAll l — call this join “Y”
on l.objid = n.neighborObjID
and l.mode = 1
and abs((p.u-p.g)-(l.u-l.g))<0.05
and abs((p.g-p.r)-(l.g-l.r))<0.05
and abs((p.r-p.i)-(l.r-l.i))<0.05
and abs((p.i-p.z)-(l.i-l.z))<0.05
  1. 参考Spark的编程接口,如果需要达到同样的目的,Spark程序如何编写?
1
2
3
4
5
6
7
8
9
10
11
var p = spark.textFile(photoObjAll)
var n = spark.textFile(neighbors)
var x_join = p.join(n) // objID, (p, n)
x_join = x_join.filter(p.objID < n.neighborObjID).filter(p.mode == 1)

sort(x_join, neighborObjID)

x_join = x_join.map(objID => neighborObjID).reduceByKey(neighborObjID)
var l = spark.textFile(photoObjAll)
y_join = x_join.join(l) // id, (p, l)
y_join.filter(l.mode == 1 && abs((p.u-p.g)-(l.u-l.g))<0.05 && abs((p.g-p.r)-(l.g-l.r))<0.05 && abs((p.r-p.i)-(l.r-l.i))<0.05 && abs((p.i-p.z)-(l.i-l.z))<0.05)
  1. 如果有四台服务器执行上述的程序,绘制其Schema DAG以及Instance DAG。假设数据通过哈希的方法分布到4台服务器上。不需要考虑服务器出错的情况。

Schema DAG

Instance DAG

打赏