我们的集群使用的是 ucloud的集群,spark版本是1.6。是一个较低的版本,对于mysql的支持非常有限,比如还不能支持in的索引查询等。但是我们分析工作很大一部分都依托于mysql,而且服务端数据经常会对数据分表存储,如下图所示
实现如下图
因此便考虑实现一个查询多表数据源的RDD。
实现一个RDD有三个必要元素。
1、partitions组成改rdd的每个partition
2、dependencies 该RDD的依赖关系
3、iterator 计算每个分区内的元素
import java.util.Properties
import com.kkworld.common.dao.DBPool
import org.apache.spark.rdd.RDD
import org.apache.spark.{Partition, SparkContext, TaskContext}
import scala.collection.mutable.ListBuffer
import scala.reflect.ClassTag
/**
* Created by cuti on 2018/11/30.
*/
class MultiTableRDD[T: ClassTag](sqlUrl: String,
sqlProp: Properties,
sql: String,
tableNumber: Int,
sc