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來使用
也可以通過spark sql來使用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時,會尋找 full.package.name.to.your.datascreate
table your_table_name
using
full.package.name.to.your.datasource
option (path "/path/to/your/data/file",...)
ource.defaultsource這個類。這個類應該是乙個relationprovider。spark會例項化乙個defaultsource物件,並呼叫createrelation方法,返回乙個baserelation。baserelation包含了生成這張表所需要的所有資訊。之後spark會把這些資訊儲存到乙個catalog(或者是hive的metastore,或者spark自己的metastore,依賴於你的配置)裡面,等待下次查詢使用。
查詢時執行:
spark 會從從catalog裡面找到上述的relation,形成乙個logicalplan。再經過一系列複雜轉換,最終呼叫buildscan,生成rdd[row]。完成後將rdd[row]返回給spark進行下一步的計算,最終返回結果。select * from your_table_name where field1 = 'a'
一般情況下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.遙感資料的目標識別獲取 這幾種途徑均存在嚴重缺點 測量儀器的實地測量雖然資料準確度和精確度較高,但工作量巨大,獲取資料量少 傳統...