成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

SparkConnectorReader原理與實(shí)踐是怎樣的

本篇文章為大家展示了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 Connector 是一個 Spark 的數(shù)據(jù)連接器,可以通過該連接器進(jìn)行外部數(shù)據(jù)系統(tǒng)的讀寫操作,Spark Connector 包含兩部分,分別是 Reader 和 Writer,而本文側(cè)重介紹 Spark Connector Reader,Writer 部分將在下篇和大家詳聊。

Spark Connector Reader 原理

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)的接口。

Basic Interfaces

  • 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 即可。

Providers

  • RelationProvider:從指定數(shù)據(jù)源中生成自定義的 relation。 createRelation()  會基于給定的 Params 參數(shù)生成新的 relation。

  • SchemaRelationProvider:可以基于給定的 Params 參數(shù)和給定的 Schema 信息生成新的 Relation。

RDD

  • 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)的類圖展示如下:

Spark Connector Reader 原理與實(shí)踐是怎樣的

  1. 定義數(shù)據(jù)源 NebulaRelatioProvider,繼承 RelationProvider 進(jìn)行 relation 自定義,繼承 DataSourceRegister 進(jìn)行外部數(shù)據(jù)源的注冊。

  2. 定義 NebulaRelation 定義 Nebula Graph 的數(shù)據(jù) Schema 和數(shù)據(jù)轉(zhuǎn)換方法。在 getSchema() 方法中連接 Nebula Graph 的 Meta 服務(wù)獲取配置的返回字段對應(yīng)的 Schema 信息。

  3. 定義 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 實(shí)踐

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)用示例如下:

  1. 在 mvn 項(xiàng)目的 pom 文件中加入 nebula-spark 依賴

<dependency>
  <groupId>com.vesoft</groupId>
  <artifactId>nebula-spark</artifactId>
  <version>1.1.0</version>
</dependency>
  1. 在 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)

網(wǎng)站優(yōu)化排名
荆州市| 吐鲁番市| 阜宁县| 平遥县| 兰西县| 阳东县| 谢通门县| 林甸县| 平塘县| 高台县| 九龙城区| 兴城市| 徐水县| 汉中市| 高台县| 景谷| 江北区| 米林县| 上高县| 肥东县| 巨鹿县| 汉阴县| 来宾市| 二连浩特市| 云霄县| 景东| 德州市| 西和县| 峡江县| 长武县| 太仆寺旗| 南郑县| 应用必备| 淮滨县| 和田市| 逊克县| 广昌县| 乐陵市| 博罗县| 田阳县| 长垣县|