学习笔记:Spark 读取和写入Phoenix数据

引入依赖:

        <dependency>
            <groupId>org.apache.phoenix</groupId>
            <artifactId>phoenix-spark</artifactId>
            <version>4.14.0-HBase-1.4</version>
        </dependency>

读取 Phoenix 数据

请添加图片描述

package com.spark.core.phoenix

import org.apache.spark.sql.SparkSession

object ReadFromPhoenix {
  def main(args: Array[String]): Unit = {

    val spark = SparkSession.builder().master("local").appName("test").getOrCreate()

    // 使用 DataSourceV2 API 加载Phoenix表为DataFrame
    val df = spark.read
      .format("org.apache.phoenix.spark")
      .option("table", "testdb.student")
      .option("zkUrl", "localhost:2181")
      .load()
    df.show()

    import org.apache.phoenix.spark._

    // 使用 phoenixTableAsDataFrame() 加载Phoenix表为DataFrame
    val df = spark.sqlContext.phoenixTableAsDataFrame(
      table = "testdb.student",
      columns = Seq("ID","NAME","SEX","PHONE","EMAIL"),
      predicate = Some("SEX = 1"),  // 可设置where条件
      zkUrl = Some("localhost:2181"))
    df.show()

    // 使用 phoenixTableAsRDD() 加载Phoenix表为RDD
    val rdd =spark.sparkContext.phoenixTableAsRDD(
      table = "testdb.student",
      columns = Seq("ID","NAME","SEX","PHONE","EMAIL"),
      zkUrl = Some("localhost:2181"))
    rdd.collect().foreach { println }

  }
}

请添加图片描述


写入 Phoenix 数据

case class student(id: String, name: String, sex: Short, phone: String, email: String)
package com.spark.core.phoenix

import org.apache.spark.sql.SparkSession

object WriteToPhoenix {
  def main(args: Array[String]): Unit = {

    val spark = SparkSession.builder().master("local").appName("test").getOrCreate()

    val rdd = spark.sparkContext.parallelize(Array(
      student("2021120604","小明",1,"13783782988","123456789@email.com"),
      student("2021120605","小红",0,"13786564688","888@email.com")))
    import spark.implicits._
    val df = rdd.toDF("ID","NAME","SEX","PHONE","EMAIL")

    // 使用 DataSourceV2 API 保存DataFrame到Phoenix表
    df.write
      .format("org.apache.phoenix.spark")
      .mode("overwrite")  // 仅支持覆盖的保存模式
      .option("table", "testdb.student")
      .option("zkUrl", "localhost:2181")
      .save()

    import org.apache.phoenix.spark._

    // 使用 saveToPhoenix() 保存DataFrame到Phoenix表
    df.saveToPhoenix(Map("table" -> "testdb.student", "zkUrl" -> "localhost:2181"))

    // 使用 saveToPhoenix() 保存RDD到Phoenix表
    rdd.saveToPhoenix(
      tableName = "testdb.student",
      cols = Seq("ID","NAME","SEX","PHONE","EMAIL"),
      zkUrl = Some("localhost:2181"))

  }
}

请添加图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值