• Spark 读取HBase数据


    Spark1.6.2 读取 HBase 1.2.3

    //hbase-common-1.2.3.jar
    //hbase-protocol-1.2.3.jar
    //hbase-server-1.2.3.jar
    //htrace-core-3.1.0-incubating.jar
    //metrics-core-2.2.0.jar

      val sparkConf = new SparkConf()
          .setAppName("User")
    
        // 创建 spark context
        val sc = new SparkContext(sparkConf)
        val sqlContext = new SQLContext(sc)
        import sqlContext.implicits._
    
        // 创建HBase configuration
        val hBaseConf = HBaseConfiguration.create()
        hBaseConf.set("hbase.zookeeper.quorum", "192.168.1.1,192.168.1.2,192.168.1.3")
        hBaseConf.set("hbase.zookeeper.property.clientPort", "2182"); // zookeeper端口号
        //设置表名
        hBaseConf.set(TableInputFormat.INPUT_TABLE, "knowledge")
    
        // 应用newAPIHadoopRDD读取HBase,返回NewHadoopRDD
        val hbaseRDD = sc.newAPIHadoopRDD(hBaseConf,
          classOf[TableInputFormat],
          classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
          classOf[org.apache.hadoop.hbase.client.Result])
    
        // 将数据映射为表  也就是将 RDD转化为 dataframe schema
        // 读取结果集RDD,返回一个MapPartitionsRDD
        val resRDD = hbaseRDD.map(tuple => tuple._2)
    
        //打印读取数据内容
        val user_knowledge = resRDD.map(r => (Bytes.toString(r.getRow),
          Bytes.toString(r.getValue(Bytes.toBytes("behavior"), Bytes.toBytes("reg_id"))),
          Bytes.toString(r.getValue(Bytes.toBytes("behavior"), Bytes.toBytes("create_user_id"))),
          Bytes.toString(r.getValue(Bytes.toBytes("behavior"), Bytes.toBytes("knowledge_id"))),
          Bytes.toString(r.getValue(Bytes.toBytes("behavior"), Bytes.toBytes("create_time")))) //
          ).toDF("row", "reg_id", "create_user_id", "knowledge_id", "create_time")
    
        user_knowledge.registerTempTable("user_knowledge")
    
        // 测试
        val df2 = sqlContext.sql("SELECT * FROM user_knowledge")
    
        df2.collect.foreach(println)
     
        sc.stop
  • 相关阅读:
    我对自己公司产品的看法与一点微不足道的建议
    Error:java: 无效的源发行版: 1.8
    生成带星期的日期格式
    使用RestTemplate发送multipart/form-data格式的数据
    解决java.lang.NoClassDefFoundError错误
    Invalid bound statement (not found) 问题处理
    java8 关于日期的处理
    关于java后台如何接收xml格式的数据
    关于线程和junit注入失败的问题
    多线程异步调度任务
  • 原文地址:https://www.cnblogs.com/fesh/p/5996656.html
Copyright © 2020-2023  润新知