本篇文章為大家展示了Spark Connector Reader 原理與實(shí)踐是怎樣的,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)剛察,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
下面主要講述如何利用 Spark Connector 進(jìn)行 Nebula Graph 數(shù)據(jù)的讀取。
Spark Connector 是一個 Spark 的數(shù)據(jù)連接器,可以通過該連接器進(jìn)行外部數(shù)據(jù)系統(tǒng)的讀寫操作,Spark Connector 包含兩部分,分別是 Reader 和 Writer,而本文側(cè)重介紹 Spark Connector Reader,Writer 部分將在下篇和大家詳聊。
Spark Connector Reader 是將 Nebula Graph 作為 Spark 的擴(kuò)展數(shù)據(jù)源,從 Nebula Graph 中將數(shù)據(jù)讀成 DataFrame,再進(jìn)行后續(xù)的 map、reduce 等操作。
Spark SQL 允許用戶自定義數(shù)據(jù)源,支持對外部數(shù)據(jù)源進(jìn)行擴(kuò)展。通過 Spark SQL 讀取的數(shù)據(jù)格式是以命名列方式組織的分布式數(shù)據(jù)集 DataFrame,Spark SQL 本身也提供了眾多 API 方便用戶對 DataFrame 進(jìn)行計(jì)算和轉(zhuǎn)換,能對多種數(shù)據(jù)源使用 DataFrame 接口。
Spark 調(diào)用外部數(shù)據(jù)源包的是 org.apache.spark.sql
,首先了解下 Spark SQL 提供的的擴(kuò)展數(shù)據(jù)源相關(guān)的接口。
BaseRelation:表示具有已知 Schema 的元組集合。所有繼承 BaseRelation 的子類都必須生成 StructType 格式的 Schema。換句話說,BaseRelation 定義了從數(shù)據(jù)源中讀取的數(shù)據(jù)在 Spark SQL 的 DataFrame 中存儲的數(shù)據(jù)格式的。
RelationProvider:獲取參數(shù)列表,根據(jù)給定的參數(shù)返回一個新的 BaseRelation。
DataSourceRegister:注冊數(shù)據(jù)源的簡寫,在使用數(shù)據(jù)源時(shí)不用寫數(shù)據(jù)源的全限定類名,而只需要寫自定義的 shortName 即可。
RelationProvider:從指定數(shù)據(jù)源中生成自定義的 relation。 createRelation()
會基于給定的 Params 參數(shù)生成新的 relation。
SchemaRelationProvider:可以基于給定的 Params 參數(shù)和給定的 Schema 信息生成新的 Relation。
RDD[InternalRow]: 從數(shù)據(jù)源中 Scan 出來后需要構(gòu)造成 RDD[Row]
要實(shí)現(xiàn)自定義 Spark 外部數(shù)據(jù)源,需要根據(jù)數(shù)據(jù)源自定義上述部分方法。
在 Nebula Graph 的 Spark Connector 中,我們實(shí)現(xiàn)了將 Nebula Graph 作為 Spark SQL 的外部數(shù)據(jù)源,通過 sparkSession.read
形式進(jìn)行數(shù)據(jù)的讀取。該功能實(shí)現(xiàn)的類圖展示如下:
定義數(shù)據(jù)源 NebulaRelatioProvider,繼承 RelationProvider 進(jìn)行 relation 自定義,繼承 DataSourceRegister 進(jìn)行外部數(shù)據(jù)源的注冊。
定義 NebulaRelation 定義 Nebula Graph 的數(shù)據(jù) Schema 和數(shù)據(jù)轉(zhuǎn)換方法。在 getSchema()
方法中連接 Nebula Graph 的 Meta 服務(wù)獲取配置的返回字段對應(yīng)的 Schema 信息。
定義 NebulaRDD 進(jìn)行 Nebula Graph 數(shù)據(jù)的讀取。 compute()
方法中定義如何讀取 Nebula Graph 數(shù)據(jù),主要涉及到進(jìn)行 Nebula Graph 數(shù)據(jù) Scan、將讀到的 Nebula Graph Row 數(shù)據(jù)轉(zhuǎn)換為 Spark 的 InternalRow 數(shù)據(jù),以 InternalRow 組成 RDD 的一行,其中每一個 InternalRow 表示 Nebula Graph 中的一行數(shù)據(jù),最終通過分區(qū)迭代的形式將 Nebula Graph 所有數(shù)據(jù)讀出組裝成最終的 DataFrame 結(jié)果數(shù)據(jù)。
Spark Connector 的 Reader 功能提供了一個接口供用戶編程進(jìn)行數(shù)據(jù)讀取。一次讀取一個點(diǎn)/邊類型的數(shù)據(jù),讀取結(jié)果為 DataFrame。
下面開始實(shí)踐,拉取 GitHub 上 Spark Connector 代碼:
git clone -b v1.0 git@github.com:vesoft-inc/nebula-java.git cd nebula-java/tools/nebula-spark mvn clean compile package install -Dgpg.skip -Dmaven.javadoc.skip=true
將編譯打成的包 copy 到本地 Maven 庫。
應(yīng)用示例如下:
在 mvn 項(xiàng)目的 pom 文件中加入 nebula-spark
依賴
<dependency> <groupId>com.vesoft</groupId> <artifactId>nebula-spark</artifactId> <version>1.1.0</version> </dependency>
在 Spark 程序中讀取 Nebula Graph 數(shù)據(jù):
// 讀取 Nebula Graph 點(diǎn)數(shù)據(jù) val vertexDataset: Dataset[Row] = spark.read .nebula("127.0.0.1:45500", "spaceName", "100") .loadVerticesToDF("tag", "field1,field2") vertexDataset.show() // 讀取 Nebula Graph 邊數(shù)據(jù) val edgeDataset: Dataset[Row] = spark.read .nebula("127.0.0.1:45500", "spaceName", "100") .loadEdgesToDF("edge", "*") edgeDataset.show()
配置說明:
nebula(address: String, space: String, partitionNum: String)
address:可以配置多個地址,以英文逗號分割,如“ip1:45500,ip2:45500” space: Nebula Graph 的 graphSpace partitionNum: 設(shè)定spark讀取Nebula時(shí)的partition數(shù),盡量使用創(chuàng)建 Space 時(shí)指定的 Nebula Graph 中的 partitionNum,可確保一個Spark的partition讀取Nebula Graph一個part的數(shù)據(jù)。
loadVertices(tag: String, fields: String)
tag:Nebula Graph 中點(diǎn)的 Tag fields:該 Tag 中的字段,,多字段名以英文逗號分隔。表示只讀取 fields 中的字段,* 表示讀取全部字段
loadEdges(edge: String, fields: String)
edge:Nebula Graph 中邊的 Edge fields:該 Edge 中的字段,多字段名以英文逗號分隔。表示只讀取 fields 中的字段,* 表示讀取全部字段
上述內(nèi)容就是Spark Connector Reader 原理與實(shí)踐是怎樣的,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁名稱:SparkConnectorReader原理與實(shí)踐是怎樣的
當(dāng)前路徑:http://jinyejixie.com/article0/iiesio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、小程序開發(fā)、網(wǎng)站改版、面包屑導(dǎo)航、企業(yè)建站、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)