Spark:spark读取hbase

spark-shell运行,若要载入hbase的jar包:
export SPARK_CLASSPATH=/opt/hbase-1.2.4/lib/*

获取hbase中列簇中的列值:

import org.apache.spark._
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.util.Bytes

val tableName = "table"   // 数据表名
val columnFamily = "col2" // 要获取的列簇名
val columnFamily_column = "c1"  // 要获取的列簇下的列名

@transient val conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE, tableName)
val hBaseRDD = sc.newAPIHadoopRDD(
    conf, 
    classOf[TableInputFormat], 
    classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], 
    classOf[org.apache.hadoop.hbase.client.Result])
    
val rdd = hBaseRDD.map{ s => 
  Bytes.toString(s._2.getValue(
      Bytes.toBytes(columnFamily), 
      Bytes.toBytes(columnFamily_column)))
}

//如果列族下没有列则第二个参数为null
//val rdd = hBaseRDD.map{ s => 
//  Bytes.toString(s._2.getValue(
//      Bytes.toBytes(columnFamily), 
//      null))
//}

获取hbase表DataFrame:

import org.apache.spark.sql._
import org.apache.spark.sql.types._
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.client.Result

class A() {
  def getHBaseBUYERValue(result: Result, cols: Array[String]) = {
    var values = ""
    for (str <- cols) {
      var value = Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes(str)))
      if (value == null)
        value = ","
      else
        value = "," + value
      values += value
    }
    Row(values.flatmap(s => s.split(",").tail))
  }

  val conf = HBaseConfiguration.create()
  conf.set(TableInputFormat.INPUT_TABLE, "buyer")
  val hBaseRDD1 = sc.newAPIHadoopRDD(
    conf,
    classOf[TableInputFormat],
    classOf[ImmutableBytesWritable],
    classOf[Result])
  val buyer_rowRDD = hBaseRDD1.map { s =>
    getHBaseBUYERValue(s._2, Array("BUY_ID", "NAME"))
  }

  val buyer_field1 = new StructField("BUY_ID", StringType, true)
  val buyer_field2 = new StructField("NAME", StringType, true)
  val buyer_schema = StructType(Array(buyer_field1, buyer_field2))
  val buyer_table = spark.createDataFrame(buyer_rowRDD, buyer_schema)
}

转载于:https://www.cnblogs.com/xuejianbest/p/10285011.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值