Phoenix4.8整合Spark

本文介绍了如何在Spark shell中使用Phoenix4.8与HBase进行交互,详细阐述了建立连接、创建DataFrame、写入数据的过程,并给出了具体的命令示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文使用Spark shel操作phoenix(参考官方文档http://phoenix.apache.org/phoenix_spark.html,解决了官方文档的一些问题)

通过phoenix提供的包来操作hbase比直接使用jdbc的方式更高效(因为比jdbc的方式更细粒度化的调度)

软件环境:

Phoenix4.8

HBase1.1.2

Spark1.5.2/1.6.3/2.x


1、在phoenix中建表

CREATE TABLE TABLE1 (ID BIGINT NOT NULL PRIMARY KEY, COL1 VARCHAR);
UPSERT INTO TABLE1 (ID, COL1) VALUES (1, 'test_row_1');
UPSERT INTO TABLE1 (ID, COL1) VALUES (2, 'test_row_2');

1、启动spark-shelll

spark-shell  --jars /opt/phoenix4.8/phoenix-spark-4.8.0-HBase-1.1.jar,/opt/phoenix4.8/phoenix-4.8.0-HBase-1.1-client.jar

2、使用DataSource API,load为DataFrame

import org.apache.phoenix.spark._

val df = sqlContext.load("org.apache.phoenix.spark", Map("table" -> "TABLE1", "zkUrl" -> "192.38.0.231:2181"))
df.filter(df("COL1") === "test_row_1" && df("ID") === 1L).select(df("ID")).show


如果spark2.x版本,使用如下方式(前提是修改了phoenix-spark模块的代码,使之兼容spark2.x,重新编译):

import org.apache.phoenix.spark._

val df = spark.read.for
### 如何使用 Spark 进行 Apache Phoenix 的读写操作 #### 创建 SparkSession 并配置连接参数 为了能够通过 Spark 访问 Phoenix 表,首先需要创建并配置 `SparkSession` 实例。这一步骤涉及到设置必要的配置选项来确保 Spark 能够正确识别和访问 Phoenix 数据库。 ```scala val spark = SparkSession.builder() .appName("Phoenix Connector Demo") .config("spark.sql.hive.metastore.uris", "thrift://localhost:9083") // Hive Metastore URI .getOrCreate() ``` 上述代码片段展示了如何初始化一个带有特定名称的应用程序以及指定了Hive元存储服务地址的Spark会话[^2]。 #### 从 Phoenix 读取数据 一旦建立了合适的 Spark 环境之后,就可以利用内置的数据源接口轻松加载来自 Phoenix 的表格数据: ```scala // 使用 Phoenix connector 加载表数据 val tableData = spark.read.format("org.apache.phoenix.spark") .option("table", "YOUR_TABLE_NAME") .load() tableData.show() // 显示前几条记录用于验证 ``` 这段 Scala 代码说明了怎样定义要查询的具体表名,并调用 `.load()` 方法执行实际的数据检索过程。 #### 向 Phoenix 写入数据 当需要把处理后的结果保存回 Phoenix 中时,则可以采用如下方式实现批量插入功能: ```scala import org.apache.phoenix.spark._ val dataToWrite = Seq( (1, "Alice"), (2, "Bob") ).toDF("id", "name") dataToWrite.write .format("org.apache.phoenix.spark") .mode(SaveMode.Append) .options(Map("table" -> "TARGET_TABLE")) .save() ``` 这里先构建了一个简单的 DataFrame 对象作为待存入的目标集合;接着设置了目标表的信息并通过 `.save()` 完成最终提交动作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值