spark读取phoenix hbase table表数据到dataframe的三种方式比较

hbase | 2020-03-06 16:28:32

spark读取phoenix表的速度总是比spark读取mysql慢,写入也是,所以我试了各种写法,比较一下


第一种:jdbc分区方式读取

var ds=spark.read.format("jdbc").option("url","jdbc:phoenix:master,slave1").option("dbtable", "itxw.table").option("zkUrl","master").option("partitionColumn", "id").option("lowerBound", "0").option("upperBound","15213372").option("numPartitions","500").load


这种方式和读取mysql数据表的方式是一样的,为了防止数据倾斜,最好获取maxid作为upperBound。这种方式是速度最快的了



第二种:官方提供的phoenixTableAsDataFrame的方法

import org.apache.phoenix.spark._
var ds=spark.sqlContext.phoenixTableAsDataFrame("itxw.table",Seq("PROJECT_NAME","PROJECT_ID"),Option("project_id='bcxw.net'"),Option("master"),null)

 

phoenix官方提供的phoenixTableAsDataFrame这种方法,速度还是很可观的,需要指定列名,也可以不指定列名,也可以指定条件。


另外:

 val configuration = new Configuration()
 org.apache.phoenix.spark.toSparkSqlContextFunctions(spark.sqlContext).phoenixTableAsDataFrame("datacenter.quest_score",Seq(),Option(""),Option("master"),null,configuration)

上面的写法中import org.apache.phoenix.spark._,和这里按包调用时调用的不是同一个方法。


第三种:spark read org.apache.phoenix.spark方法

var ds=spark.read.format("org.apache.phoenix.spark").option("table", "itxw.table").option("zkUrl",ConfigModel.hbaseZkurl).load


这种方法写法简单,貌似官方文档也提到这种写法,但速度不咋滴,估计和phoenix种select * 很慢是一个道理吧



登录后即可回复 登录 | 注册
    
关注编程学问公众号