小 T 導讀:想用 Spark 對接 TDengine?保姆級教程來了。
0、前言
TDengine 是由濤思數據開發并開源的一款高性能、分布式、支持 SQL 的時序數據庫(Time-Series Database)。
在上一篇文章中,我們示范了如何使用 Apache Flink 連接 TDengine,使用 Apache Spark 的小伙伴們已經迫不及待地等待續集了。
相對于 Flink,Spark 對接起來就簡單多了。

1、技術實現
Spark 本身封裝了 JDBC 的方法,所以我們直接使用 Spark 官網的示例代碼就可以完成對接了。
2、示例代碼
package com.taosdata.java;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SaveMode;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.jdbc.JdbcDialect;
import org.apache.spark.sql.jdbc.JdbcDialects;
public class SparkTest{
public static void main(String[] args) {
// 數據庫配置
String url = "jdbc:TAOS://u05:6030/tt?user=root&password=taosdata";
String driver = "com.taosdata.jdbc.TSDBDriver";
String dbtable = "t1";
SparkSession sparkSession = SparkSession.builder()
.appName("DataSourceJDBC") // 設置應用名稱
.master("local") // 本地單線程運行
.getOrCreate();
// 創建DataFrame
Dataset<Row> df = sparkSession
.read() // 返回一個DataFrameReader,可用于將非流數據作為DataFrame讀取
.format("jdbc") // JDBC數據源
.option("url", url)
.option("driver", driver)
.option("query", "select * from tt.meters limit 100") // 二選一,sql語句或者表
.load();
// 將DataFrame的內容顯示
df.show();
df.write() // 返回一個DataFrameWriter,可用于將DataFrame寫入外部存儲系統
.format("jdbc") // JDBC數據源
.mode(SaveMode.Append) // 如果第一次生成了,后續會追加
.option("url", url)
.option("driver", driver)
.option("dbtable", "test.meters") // 表名
.save();
sparkSession.stop();
}
}
3、簡單測試 JNI 讀寫
1) 環境準備:
a) Spark 安裝&啟動:
- wget?
- tar zxf spark-3.2.1-bin-hadoop3.2.tgz -C /usr/local
b) TDengine Database 環境準備:
- 創建原始數據:?
- create database tt;
- create table tt.meters (ts TIMESTAMP,vol INT) ;
- insert into meters values(now,220);
- 創建目標數據庫表:?
- create database test;
- create table test.meters (ts TIMESTAMP,vol INT) ;
2) 打包編譯:
源碼位置:
mvn clean package
3) 程序啟動:
spark-submit –master local –name TDenginetest –class com.taosdata.java.SparkTest /testSpark-1.0-SNAPSHOT-dist.jar
- 讀取數據
- 讀取的數據直接打印在控制臺
- 寫入數據
- select * from test.meters;
- 可以查詢到剛插入的數據
- select * from test.meters;
4、小結
Spark 本身支持 JDBC 的方式來進行讀寫,我們無需做更多適配,數據接入可以做到無縫銜接。



























