Spark读取Hbase数据转换为Dataset

Spark读取Hbase数据转换为Dataset

前言

  在公司遇到一个业务场景需要spark同时读取hive和hbase的数据进行关联数据分析。起初开发完在测试系统测试的时候,能够稳定运行,但是用到真实数据的时候很快就暴露了问题,报NullException空指针异常。根本原因是需求要关系型数据和非关系型数据进行关联,而hbase本身是列式存储,列信息是可动态扩展的,在spark转换hbase数据的时候没有提前获知完整的表字段schema,导致读取的时候某些字段丢失,以至于不能成功与关系型数据关联。
  故,对于此次遇到的问题特此记录!!!

方案的选择

以下分别介绍spark读取hbase数据进行转换Dataset并创建临时关系表结构的三个方案,第一个方案是最不稳定的,不建议;后两者视情况而定。

方案一

此方案的思想是:获取hbase列信息的rdd—>获取hbase数据rdd(Row)—>取列rdd的第一条列信息构建schema
弊端:不难理解,取第一条列信息不一定是完整的schema

public static void getHbaseDataset(SparkSession sparkSession, JavaSparkContext jsc, String hbaseTableName){
        Configuration hbaseConfiguration = new SparkHbaseUtils().getConfiguration();
        hbaseConfiguration.set(TableInputFormat.INPUT_TABLE,hbaseTableName);
        JavaPairRDD<ImmutableBytesWritable, Result> hbaseRDD = jsc.newAPIHadoopRDD(hbaseConfiguration, TableInputFormat.class, ImmutableBytesWritable.cla
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值