99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

SparkSQL簡(jiǎn)單使用-創(chuàng)新互聯(lián)

==> 什么是 Spark SQL?

創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)成都全網(wǎng)營(yíng)銷(xiāo)、網(wǎng)站重做改版、六枝網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場(chǎng)景定制商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為六枝等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

    ---> Spark SQL 是 Spark 用來(lái)處理結(jié)構(gòu)化數(shù)據(jù)的一個(gè)模塊


   ---> 作用:提供一個(gè)編程抽象(DataFrame) 并且作為分布式 SQL 查詢引擎

   --->運(yùn)行原理:將 Spark SQL 轉(zhuǎn)化為 RDD, 然后提交到集群執(zhí)行

   ---> 特點(diǎn):

        ----容易整合

      ----統(tǒng)一的數(shù)據(jù)訪問(wèn)方式

      ---- 兼容 Hive

      ---- 標(biāo)準(zhǔn)的數(shù)據(jù)連接

==> SparkSession

   ---> 特點(diǎn):(2.0引用 SparkSession)

        ---- 為用戶提供一個(gè)統(tǒng)一的切入點(diǎn)使用Spark 各項(xiàng)功能

      ---- 允許用戶通過(guò)它調(diào)用 DataFrame 和 Dataset 相關(guān) API 來(lái)編寫(xiě)程序

      ---- 減少了用戶需要了解的一些概念,可以很容易的與 Spark 進(jìn)行交互

      ---- 與 Spark 交互之時(shí)不需要顯示的創(chuàng)建 SparkConf, SparkContext 以及 SQlContext,這些對(duì)象已經(jīng)封閉在 SparkSession 中

==> DataFrames  組織成命名列的數(shù)據(jù)集,等同于數(shù)據(jù)庫(kù)中的表

    ---> 與 RDD 相比較:

      ---- RDD                是分布式的 Java 對(duì)象 的集合

      ---- DataFrame     是分布式 Row 對(duì)象的集合

   ---> 創(chuàng)建 DataFrames

        ---- 通過(guò) case class 創(chuàng)建 DataFrames

// 定義 case class (相當(dāng)于表的結(jié)構(gòu))
case class Emp(Empno:Int, ename:String, job:String, mgr:String, hiredate:String, sal:Int, comm:String, deptno:Int)   

// 將 HDFS 上的數(shù)據(jù)讀入 RDD, 并將 RDD 與 case class 關(guān)聯(lián)
val lines = sc.textFile("hdfs://bigdata0:9000/input/emp.csv").map(_.split(","))
val emp = lines.map(x=> Emp(x(0).toInt, x(1), x(2), x(3), x(4), x(5).toInt, x(6), x(7).toInt)) `

// 將RDD 轉(zhuǎn)換成 DataFrames
val empDF = emp.toDF

// 通過(guò) DataFrames 查詢數(shù)據(jù)
empDF.show

      ---- 通過(guò) SparkSession 創(chuàng)建 DataFrames

// 創(chuàng)建 StructType 來(lái)定義結(jié)構(gòu),注意,需要先導(dǎo)入模塊
import org.apache.spark.sql.types._
val myschema = StructType(List(
                StructField("empno", DataTypes.IntegerType), 
                StructField("ename", DataTypes.StringType),
                StructField("job", DataTypes.StringType),
                StructField("mgr", DataTypes.StringType),
                StructField("hiredate", DataTypes.StringType),
                StructField("sal", DataTypes.IntegerType),
                StructField("comm", DataTypes.StringType),
                StructField("deptno", DataTypes.IntegerType)
                ))
                
// 讀入數(shù)據(jù)且切分?jǐn)?shù)據(jù)
val empcsvRDD = sc.textFile("hdfs://bigdata0:9000/input/emp.csv").map(_.split(","))
// 將 RDD 數(shù)據(jù)映射成 Row,需要 import org.apache.spark.sql.Row
import org.apache.spark.sql.Row
val rowRDD = empcsvRDD.map(line=> Row(line(0).toInt, line(1), line(2), line(3),line(4), line(5).toInt, line(6), line(7).toInt)
// 創(chuàng)建 DataFrames
val df = spark.createDataFrame(rowRDD, myschema)
// 查看表
df.show

    ---- 使用 Json 文件來(lái)創(chuàng)建 DataFrame

val df = spark.read.json("Json 文件")
// 查看數(shù)據(jù)
df.show

   ---> DataFrame 操作 DataFrame 操作也稱(chēng)為無(wú)類(lèi)型的 Dataset操作


    ---- 查詢所有員工姓名

df.select("ename").show

    ---- 查詢所有員工姓名和薪水,并給薪水加 100 元

df.select($"ename", $"sal", $"sal"+ 100).show

    ---- 查詢工資大于2000的員工

df.select($"sal" > 2000).show

    ---- 求每個(gè)部門(mén)員工數(shù)

df.groupBy($"deptno").count.show

    ---- 在 DataFrame 中使用 SQL 語(yǔ)句  注: 需要首先將 DataFrame 注冊(cè)成表(視圖)

df.createOrReplaceTempView("emp")
// 執(zhí)行查詢
spark.sql("select * from emp").show

   --->臨時(shí)視圖(2種):

    ----只在當(dāng)前會(huì)話中有效            df.createOrReplaceTempView("emp1")

    ----在全局有效                    df.createGlobalTempView("emp2")

==> Datasets

    ---> 數(shù)據(jù)的分布式集合

   --->特點(diǎn):

        ----Spark1.6中添加的新接口,是DataFrame之上更高一級(jí)的抽象

      ----提供了 RDD的優(yōu)點(diǎn)(強(qiáng)類(lèi)型化,使用 lambda函數(shù)的能力)

      ----Spark SQL 優(yōu)化后的執(zhí)行引擎

      ----可以從 JVM 對(duì)象構(gòu)造,然后使用函數(shù)轉(zhuǎn)換(map, flatMap, filter等)去操作

      ----支持 Scala 和 Java,不支持 Python

   ---> 創(chuàng)建 DataSet

    ----使用序列

// 定義 case class
case class MyData(a:String, b:String)
// 生成序列并創(chuàng)建 DataSet
val ds = Seq(MyData(1, "Tom"), MyData(2, "Mary")).toDS
// 查看結(jié)果
ds.show

    ----使用 Json 數(shù)據(jù)

// 定義 case class 
case class Person(name:String, gender:String)
//通過(guò) Json 數(shù)據(jù)生成 DataFrame
val df = spark.read.json(sc.parallelize("""{"gender":"Male", "name": "Tom"}""" ::Nil))
// 將 DataFrame 轉(zhuǎn)成 DataSet
df.as[Person].show
df.as[Person].collect

    ----通過(guò)使用 DHFS 執(zhí)行 WordCount 程序

// 讀取 HDFS 數(shù)據(jù),并創(chuàng)建 DataSet
val linesDS = spark.read.text("hdfs://bigdata0:9000/input/data.txt").as[String]
// 對(duì)DataSet 進(jìn)行操作:分詞后, 查詢長(zhǎng)度大于3 的單詞
val words = linesDS.flatMap(_.split(" ")).filter(_.length > 3)
// 查看結(jié)果
words.show
words.collect

// 執(zhí)行wordcount 程序
val result = linesDS.flatMap(_.split(" ").map((_.1)).groupByKey(x=> x._1).count)
result.show
// 排序
result.orderBy($"value").show

==> Datasets 操作

    ---> joinWith 和 join 的區(qū)別是連接后的新 Dataset 的 schema 會(huì)不一樣

// 使用 emp.json 生成 DataFrame
val empDF = spark.read.json("/root/resources/emp.json")
// 查詢工資大于 3000 的員工
empDF.where($"sal" > 3000).show
// 創(chuàng)建 case class
case class Emp(empno:Lone, ename:String, job:String, hiredate:String, mgr:String, sal:Long, comm:String, deptno:Long)
// 生成 DataSets,并查詢數(shù)據(jù)
val empDS = empDF.as[Emp]
// 查詢工資大于 3000 的員工
empDS.filter(_.sal > 3000).show
// 查看 10 號(hào)部門(mén)的員工
empDS.filter(_.deptno == 10)
// 多表查詢
// 1.創(chuàng)建部門(mén)表
val deptRDD = sc.textFile("/test/dept.csv").map(_.split(","))
case class Dept(deptno:Int, dname:String, loc:String)
val deptDS = deptRDD.map(x=>Dept(x(0).toInt, x(1), x(2))).toDS

// 2.創(chuàng)建員工表
case class Emp(empno:Int, ename:String, job:String, mgr:String, hiredate:String, sal:Int, comm:String, deptno:Int)
val empRDD = sc.textFile("/test/emp.csv").map(_.split(","))
val empDS = empRDD.map(x=> Emp(x(0).toInt, x(1), x(2), x(3), x(4), x(5).toInt, x(6), x(7).toInt))

// 3.執(zhí)行多表查詢: 等值鏈接
val result = deptDF.join(empDS, "deptno")

// 另一種寫(xiě)法: 注意有三個(gè)等號(hào)
val result = deptDS.joinWith(empDS, deptDS("deptno") === empDS("deptno"))
// 查看執(zhí)行計(jì)劃
result.explain

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+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ì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享文章:SparkSQL簡(jiǎn)單使用-創(chuàng)新互聯(lián)
URL標(biāo)題:http://www.yijiale78.com/article40/dodiho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站建站公司云服務(wù)器網(wǎng)站收錄響應(yīng)式網(wǎng)站網(wǎng)站內(nèi)鏈

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)