欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Parquet介紹及簡(jiǎn)單使用-創(chuàng)新互聯(lián)

==> 什么是parquet

修文ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

        Parquet 是列式存儲(chǔ)的一種文件類型

==> 官網(wǎng)描述:

            Apache Parquet is a columnar storage format available to any project in the Hadoop ecosystem, regardless of the choice of data processing framework, data model or programming language

        無論數(shù)據(jù)處理框架,數(shù)據(jù)模型或編程語言的選擇如何,Apache Parquet都是Hadoop生態(tài)系統(tǒng)中任何項(xiàng)目可用的列式存儲(chǔ)格式

==> 由來

    Parquet的靈感來自于2010年Google發(fā)表的Dremel論文,文中介紹了一種支持嵌套結(jié)構(gòu)的存儲(chǔ)格式,并且使用了列式存儲(chǔ)的方式提升查詢性能,在Dremel論文中還介紹了Google如何使用這種存儲(chǔ)格式實(shí)現(xiàn)并行查詢的,如果對(duì)此感興趣可以參考論文和開源實(shí)現(xiàn)Apache Drill。

==> 特點(diǎn):

   ---> 可以跳過不符合條件的數(shù)據(jù),只讀取需要的數(shù)據(jù),降低 IO 數(shù)據(jù)量

   ---> 壓縮編碼可以降低磁盤存儲(chǔ)空間(由于同一列的數(shù)據(jù)類型是一樣的,可以使用更高效的壓縮編碼(如 Run Length Encoding t Delta Encoding)進(jìn)一步節(jié)約存儲(chǔ)空間)

   ---> 只讀取需要的列,支持向量運(yùn)算,能夠獲取更好的掃描性能

   ---> Parquet 格式是 Spark SQL 的默認(rèn)數(shù)據(jù)源,可通過 spark.sql.sources.default 配置

==> parquet 常用操作


    ---> load 和 save 函數(shù)

// 讀取 Parquet 文件
val usersDF = spark.read.load("/test/users.parquet")

// 查詢 Schema 和數(shù)據(jù)
usersDF.printSchema
usersDF.show

// 查詢用戶的 name 和喜愛顏色并保存
usersDF.select($"name", $"favorite_color").write.save("/test/result/parquet")
// 驗(yàn)證結(jié)果 可通過 printSchema 查詢數(shù)據(jù)結(jié)構(gòu),使用 show 查看數(shù)據(jù)

// 顯式指定文件格式: 加載 json 格式
val usersDF = spark.read.format("json").load("/test/people.json")

// 存儲(chǔ)模式(Save Modes) 
// 可以采用 SaveMode 執(zhí)行存儲(chǔ)操作, SaveMode 定義 了對(duì)數(shù)據(jù)的處理模式,需要注意的是,這些保存模式不使用任何鎖定,不是原子操作
// 當(dāng)使用 Overwrite 方式執(zhí)行時(shí),在輸出新數(shù)據(jù)之前,原數(shù)據(jù)就已經(jīng)被刪除
usersDF.select($"name").write.save("/test/parquet1")   // 若 /test/parquet1 存在會(huì)報(bào)錯(cuò)
usersDF.select($"name").wirte.mode("overwrite").save("/test/parquet1")        // 使用 overwrite 即可

// 將結(jié)果保存為表, 也可以進(jìn)行分區(qū), 分桶等操作: partitionBy  bucketBy
usersDF.select($"name").write.saveAsTable("table1")

   ---> Parquet文件

Parquet 是一個(gè)列格式而且用于多個(gè)數(shù)據(jù)處理系統(tǒng)中

       Spark SQL 提供支持對(duì)于 Parquet 文件的讀寫,也就是自動(dòng)保存原始 數(shù)據(jù)的 Schema, 當(dāng)寫 Parquet 文件時(shí),所有的列被自動(dòng)轉(zhuǎn)化為 nullable,因?yàn)榧嫒菪缘木壒?/strong>

        ---- 讀取 Json 格式的數(shù)據(jù),將其轉(zhuǎn)換成 parquet 格式,創(chuàng)建相應(yīng)的表,使用 SQL 語句查詢

// 從 json 文件中讀入數(shù)據(jù)
val empJson = spark.read.json("/test/emp.json")
// 將數(shù)據(jù)保存為 parquet
empJson.write.mode("overwrite").parquet("/test/parquet")
// 讀取 parquet
val empParquet = spark.read.parquet("/test/parquet")
// 創(chuàng)建臨時(shí)表 emptable
empParquet.createOrReplaceTempView("emptalbe")
// 使用 SQL 語句執(zhí)行查詢
spark.sql("select * from emptable where deptno=10 and sal>1500").show

      ---- Schematic 的合并: 先定義一個(gè)簡(jiǎn)單的 Schema,然后逐漸增加列描述,用戶可以獲取多個(gè)有多個(gè)不同 Schema 但相互兼容的 Parquet 文件

// 創(chuàng)建第一個(gè)文件
val df1 = sc.makeRDD(1 to 5).map(x=> (x, x*2)).toDF("single", "double")
scala> df1.printSchema
root
 |-- single: integer (nullable = false)
 |-- double: integer (nullable = false)
 
 
// 創(chuàng)建第二個(gè)文件 
 scala> val df2 = sc.makeRDD(6 to 10).map(x=> (x, x*2)).toDF("single", "triple")
df2: org.apache.spark.sql.DataFrame = [single: int, triple: int]

scala> df2.printSchema
root
 |-- single: integer (nullable = false)
 |-- triple: integer (nullable = false)
  
 scala> df2.write.parquet("/data/testtable/key=2")

 // 合并上面的兩個(gè)文件
scala> val df3 = spark.read.option("mergeSchema", "true").parquet("/data/testtable")
df3: org.apache.spark.sql.DataFrame = [single: int, double: int ... 2 more fields]

scala> df3.printSchema
root
 |-- single: integer (nullable = true)
 |-- double: integer (nullable = true)
 |-- triple: integer (nullable = true)
 |-- key: integer (nullable = true)
 
 scala> df3.show
+------+------+------+---+
|single|double|triple|key|
+------+------+------+---+
|     8|  null|    16|  2|
|     9|  null|    18|  2|
|    10|  null|    20|  2|
|     3|     6|  null|  1|
|     4|     8|  null|  1|
|     5|    10|  null|  1|
|     6|  null|    12|  2|
|     7|  null|    14|  2|
|     1|     2|  null|  1|
|     2|     4|  null|  1|
+------+------+------+---+

   ---> Json Datasets(兩種寫法)

// 第一種
scala> val df4 = spark.read.json("/app/spark-2.2.1-bin-hadoop2.7/examples/src/main/resources/people.json")
df4: org.apache.spark.sql.DataFrame = [age: bigint, name: string]

scala> df4.show
+----+-------+
| age|   name|
+----+-------+
|null|Michael|
|  30|   Andy|
|  19| Justin|
+----+-------+

// 第二種
scala> val df5 = spark.read.format("json").load("/app/spark-2.2.1-bin-hadoop2.7/examples/src/main/resources/people.json")
df5: org.apache.spark.sql.DataFrame = [age: bigint, name: string]

scala> df5.show
+----+-------+
| age|   name|
+----+-------+
|null|Michael|
|  30|   Andy|
|  19| Justin|
+----+-------+

   ---> JDBC 方式讀取關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)(需要將 JDBC 的驅(qū)動(dòng)加入)

// 將 JDBC 的驅(qū)動(dòng)加入
bin/spark-shell --master spark://bigdata11:7077 --jars /root/temp/ojdbc6.jar --driver-class-path /root/temp/ojdbc6.jar

// 讀取 Oracle
val oracleEmp = spark.read.format("jdbc")
                    .option("url","jdbc:oracle:thin:@192.168.10.100:1521/orcl.example.com")
                    .option("dbtable","scott.emp")
                    .option("user","scott")
                    .option("password","tiger").load

   ---> 操作 Hive 的表

        ---- 把 hive 和 hadoop 的配置文件拷貝到sprke 的 conf 目錄下: hive-sit.xml, core-sit.xml, hdfs-sit.xml

      ---- 啟動(dòng) Spark-shell 時(shí) 指定mysql 數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序

 ./bin/spark-shell --master spark://bigdata0:7077 --jars /data/tools/mysql-connector-java-5.1.43-bin.jar  --driver-class-path /data/tools/mysql-connector-java-5.1.43-bin.jar

    ---- 使用 Spark Shell 操作 Hive

// 創(chuàng)建表
spark.sql("create table ccc(key INT, value STRING) row format delimited fields terminated by ','")

// 導(dǎo)入數(shù)據(jù)
spark.sql("load data local path '/test/data.txt' into table ccc")

// 查詢數(shù)據(jù)
spark.sql("select * from ccc").show

    ---- 使用 Spark SQL 操作 Hive

show tables;
select * from ccc;

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章名稱:Parquet介紹及簡(jiǎn)單使用-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://chinadenli.net/article20/dojpjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、小程序開發(fā)電子商務(wù)、動(dòng)態(tài)網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)