1. 程式人生 > >Spark入門之六:SparkSQL實戰

Spark入門之六:SparkSQL實戰

  • sqlContext
    1. 使用Case Class定義RDD
      1. 介紹
        對於Case Class方式,首先要定義Case Class,在RDDTransform過程中使用Case Class可以隱式轉化成SchemaRDD,然後再使用registerTempTable註冊成表。註冊成表後就可以在sqlContext對錶進行操作,如select insertjoin等。注意,case class可以是巢狀的,也可以使用類似Sequences  Arrays之類複雜的資料型別。
      2. 演示程式碼
        scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)
        scala> import sqlContext.implicits._
        scala> case class Person(name:String,age:Int)
        scala> val people=sc.textFile("hdfs://cloud25:9000/data/people.txt").map(_.split(",")).map(p=>Person(p(0),p(1).trim.toInt)).toDF()
        scala> teenagers.map(t => "Name: " + t(0)).collect().foreach(println)
    2. parquest演示
      1. 介紹
        sqlContext可以讀取parquet檔案,由於parquet檔案中保留了schema的資訊,所以不需要使用case class來隱式轉換。sqlContext讀入parquet檔案後直接轉換成SchemaRDD,也可以將SchemaRDD儲存成parquet檔案格式。
      2. 演示程式碼
        scala> import sqlContext.implicits._
        scala> sqlContext.setConf("spark.sql.parquet.binaryAsString", "true") //解決檔案中parquet中binary欄位的問題
        scala> val wikiData = sqlContext.parquetFile("hdfs://cloud25:9000/data/wiki_parquet").toDF()
        scala> wikiData.count()
        scala> wikiData.registerTempTable("wikidata")
        scala> val countResult = sqlContext.sql("SELECT COUNT(*) FROM wikiData").collect()
        scala> val queryResult= sqlContext.sql("SELECT username, COUNT(*) AS cnt FROM wikiData WHERE username <> '' GROUP BY username ORDER BY cnt DESC LIMIT 10")
        scala> queryResult.collect().foreach(println)
    3. Join演示
      1. 介紹
        sqlContext可以從多個種類的SchemaRDD中執行join操作
      2. 演示程式碼
        scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)
        scala> import sqlContext.implicits._
        scala> case class Person(name:String,age:Int)
        scala> val people=sc.textFile("hdfs://cloud25:9000/data/people.txt").map(_.split(",")).map(p=>Person(p(0),p(1).trim.toInt)).toDF()
        scala> people.saveAsParquetFile("hdfs://cloud25:9000/data/people.parquet")
        scala> val parquetFile = sqlContext.parquetFile("hdfs://cloud25:9000/data/people.parquet")
        scala> people.registerTempTable("people")
        scala> parquetFile.registerTempTable("parquetFile")
        scala> val jointbls = sqlContext.sql("SELECT people.name FROM people join parquetFile where people.name=parquetFile.name")
        scala> jointbls.collect.foreach(println)
  • 相關推薦

    Spark入門SparkSQL實戰

    sqlContext 使用Case Class定義RDD 介紹對於Case Class方式,首先要定義Case Class,在RDD的Transform過程中使用Case Class可以隱式轉化成SchemaRDD,然後再使用registerTempTable註冊成表。註冊成表後就可以在sqlConte

    C++ Primer高速入門數組和指針

    borde ott 1.5 del word ans 12px 關聯 bre 更新:勘誤,delete [] 豬 我們知道,C語言以及早期的面向結構的語言差點兒都支持數組定義。比方整形數組int 女神[2]。表示有倆數: 女神[0], 女神[1]。她們都是

    python程式設計入門字串詳講

    第六章 字串 其實我們在講python基礎部分的時候,已經涉及到字串的講解了,但是我們講的並不是很深入,作為python最常用的型別,字串肯定有屬於它自己的奧祕,下面我們對字串進行詳細的講解。 6.1 字串 不知道大家在學習了字串,列表和元組之後,有沒有發現其實

    Godot3遊戲引擎入門製作TileMap瓦片地圖

    一、前言 收到一個高興的訊息: 2018 年 Github 最新統計出爐, Godot 是所有專案裡增長速度最快的第三位!所以,我還是非常看好它的,哈哈!連結在此: Fastest growing open source projects ,截圖如下: 吹逼結

    Spark入門Spark Streaming 的原理以及應用場景介紹

    什麼是Spark StreamingSpark Streaming類似於Apache Storm,用於流式資料的處理。根據其官方文件介紹,Spark Streaming有高吞吐量和容錯能力強這兩個特點。Spark Streaming支援的資料輸入源很多,例如:Kafka、F

    SpringMVC入門使用Thymeleaf作為檢視

    使用Thymeleaf 儘管JSP已經存在了很長的時間,並且在JavaWeb伺服器中無處不在,但是它卻存在一些缺陷。JSP最明顯的問題在於它看起來像HTML或XML,但它事實上並不是。強大的JSP標籤庫帶來了不錯的渲染效果,但是這些標籤會使頁面變得非常混亂。在

    Spark 入門Spark RDD詳解

    RDD的容錯機制實現分散式資料集容錯方法有兩種:資料檢查點和記錄更新RDD採用記錄更新的方式:記錄所有更新點的成本很高。所以,RDD只支援粗顆粒變換,即只記錄單個塊上執行的單個操作,然後建立某個RDD的變換序列(血統)儲存下來;變換序列指,每個RDD都包含了他是如何由其他RDD變換過來的以及如何重建某一塊資料

    Spark修煉道(進階篇)——Spark入門到精通第十Spark Streaming與Kafka

    作者:周志湖 主要內容 Spark Streaming與Kafka版的WordCount示例(一) Spark Streaming與Kafka版的WordCount示例(二) 1. Spark Streaming與Kafka版本的WordCount示例

    Spark修煉道(進階篇)——Spark入門到精通第十節 Spark SQL案例實戰(一)

    作者:周志湖 放假了,終於能抽出時間更新部落格了……. 1. 獲取資料 本文通過將github上的Spark專案git日誌作為資料,對SparkSQL的內容進行詳細介紹 資料獲取命令如下: [[email protected] spa

    Spark修煉道(進階篇)——Spark入門到精通Spark程式設計模型(三)

    作者:周志湖 網名:搖擺少年夢 微訊號:zhouzhihubeyond 本節主要內容 RDD transformation(續) RDD actions 1. RDD transformation(續) (1)repartitionAnd

    Spark源代碼分析Task調度(二)

    oge 3.4 總結 utili filter 相關 .com ram 順序 話說在《Spark源代碼分析之五:Task調度(一)》一文中,我們對Task調度分析到了DriverEndpoint的makeOffers()方法。這種方法針對接收到的Re

    Spark修煉道(進階篇)——Spark入門到精通第一節 Spark 1.5.0叢集搭建

    作者:周志湖 網名:搖擺少年夢 微訊號:zhouzhihubeyond 本節主要內容 作業系統環境準備 Hadoop 2.4.1叢集搭建 Spark 1.5.0 叢集部署 注:在利用CentOS 6.5作業系統安裝spark 1.5叢集過程中,

    Spark修煉道(進階篇)——Spark入門到精通第十四節 Spark Streaming 快取、Checkpoint機制

    作者:周志湖 微訊號:zhouzhihubeyond 主要內容 Spark Stream 快取 Checkpoint 案例 1. Spark Stream 快取 通過前面一系列的課程介紹,我們知道DStream是由一系列的RDD構成的,

    Spark修煉道(進階篇)——Spark入門到精通第十三節 Spark Streaming—— Spark SQL、DataFrame與Spark Streaming

    主要內容 Spark SQL、DataFrame與Spark Streaming 1. Spark SQL、DataFrame與Spark Streaming import org.apache.spark.SparkConf import org

    Spark修煉道(進階篇)——Spark入門到精通第十五節 Kafka 0.8.2.1 叢集搭建

    作者:周志湖 微訊號:zhouzhihubeyond 本節為下一節Kafka與Spark Streaming做鋪墊 主要內容 1.kafka 叢集搭建 1. kafka 叢集搭建 kafka 安裝與配置 tar -zxvf kafka_2

    Spark修煉道(進階篇)——Spark入門到精通第九節 Spark SQL執行流程解析

    1.整體執行流程 使用下列程式碼對SparkSQL流程進行分析,讓大家明白LogicalPlan的幾種狀態,理解SparkSQL整體執行流程 // sc is an existing SparkContext. val sqlContext = new or

    sparkSQL1.1入門深入瞭解sparkSQL執行計劃

          前面兩章花了不少篇幅介紹了SparkSQL的執行過程,很多讀者還是覺得其中的概念很抽象,比如Unresolved LogicPlan、LogicPlan、PhysicalPlan是長得什麼樣子,沒點印象,只知道名詞,感覺很縹緲。本章就著重介紹一個工具hive/

    Spark修煉道(進階篇)——Spark入門到精通第十節 Spark Streaming(一)

    本節主要內容 Spark流式計算簡介 Spark Streaming相關核心類 入門案例 1. Spark流式計算簡介 Hadoop的MapReduce及Spark SQL等只能進行離線計算,無法滿足實時性要求較高的業務需求,例如實時推薦、實時

    VS2013/MFC程式設計入門(對話方塊為對話方塊新增控制元件)

    建立對話方塊資源需要建立對話方塊模板、修改對話方塊屬性、為對話方塊新增各種控制元件等步驟,前面一講中已經講了建立對話方塊模板和修改對話方塊屬性,本節繼續講如何為對話方塊新增控制元件。        上一講中建立了一個名為“Addition”的工程,目的是生成一個實現加法

    Spark 入門十二再看Spark中的排程策略(Standlone)

    資源排程是Spark中比較重要的內容,對排程的相關原理以及策略的瞭解對叢集的執行以及優化都會有很大的幫助,資源排程的方式有多種,Local,Standlone,Yarn,Mesos等,本文只針對Standlone的方式做簡介 幾個重要的概念 開始文章之前