如何實現乙個spark資料來源

2021-07-11 00:51:09 字數 2095 閱讀 7129

spark data source api是一套介面,讓開發者可以通過實現這些介面,從而將儲存在磁碟(或者hdfs whatever)上的各種格式的資料轉化為dataframe;或者將dataframe寫為各種格式的資料儲存起來。

這些介面定義在:

sql/core/src/main/scala/org/apache/spark/sql/sources/inte***ces.scala

一般來講,所有的資料來源都要實現以下三個介面:

當然,spark也提供了其他介面來豐富你的資料來源的功能, 這些都可以在上述的檔案中找到相應的描述。比如prunedfilteredscan介面,spark將需要的行和列傳入,那麼你的資料來源就可以根據這些資訊過濾掉不需要的行和列。如果某些表示式無法處理,那麼還可以把不能處理的表示式返回給spark,資料返回後讓spark進行處理。再比如catalystscan介面,實現了這個介面後,spark會把內部的expression傳給資料來源,讓資料來源來處理這些表示式。如果資料來源本身有索引或者其他meta資訊,那麼可以得到相應的效能提公升。

可以通過dataframe來使用

import org.apache.spark.sql.sqlcontext

val sqlcontext = new sqlcontext(sc)

val df = sqlcontext.read

.format("full.package.name.to.your.datasource")

.option("key1", "value1")

.option("key2", "value2")

.load("/path/to/your/data/file")

也可以通過spark sql來使用

create

table your_table_name

using

full.package.name.to.your.datasource

option (path "/path/to/your/data/file",...)

當spark執行這條sql時,會尋找 full.package.name.to.your.datas

ource.defaultsource這個類。這個類應該是乙個relationprovider。spark會例項化乙個defaultsource物件,並呼叫createrelation方法,返回乙個baserelation。baserelation包含了生成這張表所需要的所有資訊。之後spark會把這些資訊儲存到乙個catalog(或者是hive的metastore,或者spark自己的metastore,依賴於你的配置)裡面,等待下次查詢使用。

查詢時執行:

select * from your_table_name where field1 = 'a'

spark 會從從catalog裡面找到上述的relation,形成乙個logicalplan。再經過一系列複雜轉換,最終呼叫buildscan,生成rdd[row]。完成後將rdd[row]返回給spark進行下一步的計算,最終返回結果。

一般情況下baserelation和tablescan會放在乙個類中實現,然後再額外實現乙個relationprovider,通過createrelation方法返回乙個baserelation。

**示例

import org.apache.spark.sql.sources._

import org.apache.spark.sql.sqlcontext

class

defaultsource

extends

relationprovider

}case

class

yourdatasourcerelation

( sqlcontext: sqlcontext,

path: string,

param1: string,

param2: string)

extends

baserelation

with

tablescan

}

SpringBoot學習 資料來源(一)單資料來源

springboot2.1.9預設支援三種資料來源 connection pool com.zaxxer.hikari.hikaridatasource org.apache.tomcat.jdbc.pool.datasource org.apache.commons.dbcp2.basicdata...

GIS資料來源的乙個關鍵問題

blog.csdn.net clever101 gis資料來源的乙個關鍵問題是 gis資料的獲取問題。從傳統來看,gis資料的獲取主要依靠以下途徑 1.測量儀器的實地測量獲取 2.傳統地圖掃瞄後進行人工向量化 3.遙感資料的目標識別獲取 這幾種途徑均存在嚴重缺點 測量儀器的實地測量雖然資料準確度和精...

GIS資料來源的乙個關鍵問題

gis 資料來源的乙個關鍵問題是 gis 資料的獲取問題。從傳統來看,gis 資料的獲取主要依靠以下途徑 1.測量儀器的實地測量獲取 2.傳統地圖掃瞄後進行人工向量化 3.遙感資料的目標識別獲取 這幾種途徑均存在嚴重缺點 測量儀器的實地測量雖然資料準確度和精確度較高,但工作量巨大,獲取資料量少 傳統...