Spark SQL 編程API入門系列之SparkSQL數據源

?

?

  不多說,直接上干貨!

?

?

?

?

SparkSQL數據源:從各種數據源創建DataFrame

  因為 spark sql,dataframe,datasets 都是共用 spark sql 這個庫的,三者共享同樣的代碼優化,生成以及執行流程,所以 sql,dataframe,datasets 的入口都是 sqlContext。

  可用于創建 spark dataframe 的數據源有很多:

?

?

?

?

?

SparkSQL數據源:RDD

    val sqlContext = new org.apache.spark.sql.SQLContext(sc)// this is used to implicitly convert an RDD to a DataFrame.
    import sqlContext.implicits._// Define the schema using a case class.case class Person(name: String, age: Int)// Create an RDD of Person objects and register it as a table.val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()

   val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)) sqlContext.createDataFrame(people)

?

?

?

?

?

SparkSQL數據源:Hive

  當從Hive 中讀取數據時,Spark SQL 支持任何Hive 支持的存儲格式(SerDe),包括文件、RCFiles、ORC、Parquet、Avro,以及Protocol Buffer(當然Spark SQL也可以直接讀取這些文件)。

  要連接已部署好的Hive,需要拷貝hive-site.xml、core-site.xml、hdfs-site.xml到Spark 的./conf/ 目錄下即可

  如果不想連接到已有的hive,可以什么都不做直接使用HiveContext:

  Spark SQL 會在當前的工作目錄中創建出自己的Hive 元數據倉庫,叫作metastore_db

  如果你嘗試使用HiveQL 中的CREATE TABLE(并非CREATE EXTERNAL TABLE)語句來創建表,這些表會被放在你默認的文件系統中的/user/hive/warehouse 目錄中(如果你的classpath 中有配好的hdfs-site.xml,默認的文件系統就是HDFS,否則就是本地文件系統)。

?

?

?

?

SparkSQL數據源:Hive讀寫

// sc is an existing SparkContext.

val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)

sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")

sqlContext.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")

// Queries are expressed in HiveQL

sqlContext.sql("FROM src SELECT key, value").collect().foreach(println)

?

?

?

?

SparkSQL數據源:訪問不同版本的metastore

  從Spark1.4開始,Spark SQL可以通過修改配置去查詢不同版本的?Hive metastores(不用重新編譯)

?

?

?

?

?

?

?

?

SparkSQL數據源:Parquet

Parquet(http://parquet.apache.org/)是一種流行的列式存儲格式,可以高效地存儲具有嵌套字段的記錄。

Parquet 格式經常在Hadoop 生態圈中被使用,它也支持Spark SQL 的全部數據類型。Spark SQL 提供了直接讀取和存儲Parquet 格式文件的方法。

  val sqlContext = new org.apache.spark.sql.SQLContext(sc)// this is used to implicitly convert an RDD to a DataFrame.
        import sqlContext.implicits._// Define the schema using a case class.case class Person(name: String, age: Int)// Create an RDD of Person objects and register it as a table.val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()people.write.parquet("xxxx")val parquetFile = sqlContext.read.parquet("people.parquet")//Parquet files can also be registered as tables and then used in SQL statements.parquetFile.registerTempTable("parquetFile")val teenagers = sqlContext.sql("SELECT name FROM parquetFile WHERE age >= 13 AND age <= 19")teenagers.map(t => "Name: " + t(0)).collect().foreach(println)

?

?

?

?

?

?

?

SparkSQL數據源:Parquet-- Partition Discovery

  在Hive中通常會用分區表來優化性能,比如:

  

  SQLContext.read.parquet或者SQLContext.read.load只需要指定path/to/table,SparkSQL會自動從路徑中提取分區信息,返回的DataFrame?的schema?將是:

?

  當然你可以使用Hive讀取方式:

hiveContext.sql("FROM src SELECT key, value").

?

?

?

?

?

?

SparkSQL數據源:Json

  SparkSQL支持從Json文件或者Json格式的RDD讀取數據

  val sqlContext = new org.apache.spark.sql.SQLContext(sc)

// 可以是目錄或者文件夾val path = "examples/src/main/resources/people.json"val people = sqlContext.read.json(path)// The inferred schema can be visualized using the printSchema() method.
            people.printSchema()// Register this DataFrame as a table.people.registerTempTable("people")// SQL statements can be run by using the sql methods provided by sqlContext.val teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19")// Alternatively, a DataFrame can be created for a JSON dataset represented by// an RDD[String] storing one JSON object per string.val anotherPeopleRDD = sc.parallelize("""{"name":"Yin","address":{"city":"Columbus","state":"Ohio"}}""" :: Nil)val anotherPeople = sqlContext.read.json(anotherPeopleRDD)

?

?

?

?

?

?

?

SparkSQL數據源:JDBC

val jdbcDF = sqlContext.read.format("jdbc").options(Map("url" -> "jdbc:postgresql:dbserver","dbtable" -> "schema.tablename")).load()

?

?

支持的參數:

?

?

?

轉載于:https://www.cnblogs.com/zlslch/p/6944860.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455521.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455521.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455521.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H.264中的一些易混淆概念

Q:PSNR 峰值信噪比 Q:是根據它來取qp是不是&#xff1f; A:不是, 和QP沒有直接關系, 但是QP的選擇會影響到PSNR Q: 如果不用率失真最優化&#xff0c; 為什么選擇SATD&#xff0b;deltar&#xff08;mv&#xff0c;mode&#xff09;作為模式選擇的依據&#xff1f;為什么運…

Java中final關鍵字的幾種用法

在java的關鍵字中&#xff0c;static和final是兩個我們必須掌握的關鍵字。不同于其他關鍵字&#xff0c;他們都有多種用法&#xff0c;而且在一定環境下使用&#xff0c;可以提高程序的運行性能&#xff0c;優化程序的結構。下面我們來了解一下final關鍵字及其用法。 final關鍵…

python pyqt5安裝_Python3 安裝PyQt5及exe打包圖文教程

環境: Python 3.6.4 Pycharm Professional 2017.3.3 PyQt5 PyQt5-tools① Python 3 安裝Python 3.x 安裝時&#xff0c;默認勾選ADD Python 3.6 to PATH和ADD Python to environment variables的情況下&#xff0c;系統會向path中增加以下兩個環境變量。D:\Program Files\Py…

《企業軟件交付:敏捷與高效管理精要》——3.4 企業軟件交付的軟件工廠方法...

3.4 企業軟件交付的軟件工廠方法 正如我們前面討論的&#xff0c;今天的機構面對的商業環境正以前所未有的速度發生變化。與此同時&#xff0c;這些機構還要管理和降低整個機構的運營成本。這就直接意味著&#xff0c;他們不僅要最大限度地減少浪費和低效率&#xff0c;還要提…

201706問題記錄

1.四周陰影 box-shadow:0px 0px 10px #f5f5f5; 2. 原生setattribute()方法 jquery的attr()$(.fd-sq-zk).attr("title","收起"); 3.在iframe中獲取外層容器的元素 屬性等 $(parent.document).find("html")..... 4.監聽頁面變大變小事件 /…

一致性hash算法_(圖文案例)一致性哈希算法詳解 一點課堂(多岸教育)

一致性Hash算法關于一致性Hash算法&#xff0c;在我之前的博文中已經有多次提到了&#xff0c;MemCache超詳細解讀一文中”一致性Hash算法”部分&#xff0c;對于為什么要使用一致性Hash算法、一致性Hash算法的算法原理做了詳細的解讀。算法的具體原理這里再次貼上&#xff1a;…

《HTML5 Canvas游戲開發實戰》——2.1 繪制基本圖形

本節書摘來自華章計算機《HTML5 Canvas游戲開發實戰》一書中的第2章&#xff0c;第2.1節,作者&#xff1a;張路斌著&#xff0c; 更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。 2.1 繪制基本圖形 所謂基本圖形&#xff0c;就是指線、矩形、圓等最簡單的圖形&#x…

如何查看Ubuntu版本

有時候需要查看一下系統安裝的Ubuntu的版本&#xff0c;最簡單的方式是輸入lsb_release -a。whatis lsb_release輸出&#xff1a;print distribution-specific information。所以lsb_release這個命令就是用來輸出發行版的信息的。 Open the Terminal enter:lsb_release -a It w…

linux下.a/.so/.la目標庫區別

在linux平臺上編譯時&#xff0c;常會遇到目標庫的疑問&#xff0c;有靜態庫也有動態庫&#xff0c;單個理解都不太難&#xff0c;但是對復雜的工程而言&#xff0c;一旦混合到一起去&#xff0c;對整個工程的理解和調用&#xff0c;將會造成很大困擾&#xff0c;本文就匯總這幾…

python 二元函數繪制_Python繪制二元函數曲面

微實踐&#xff1a;繪制二元函數曲面我們將演示如何借助于ufunc的廣播運算計算下述二元函數的在一個xy平面上的值并將其繪制成3D曲面。其中&#xff0c;x和y的取值范圍均為[-2,2]。為了達到目的&#xff0c;我們需要一個二維的結果數組z&#xff0c;其元素的下標對應參數x,y的取…

Npgsql使用入門(三)【批量導入數據】

Program.cs代碼: class Program{static void Main(string[] args){var test new PgBulkCopyHelper<SingleBuilding>("bld_amap_gzmain");foreach (string pName in test.PropNames){Console.WriteLine("name: {0},\t\ttype: {1}", pName, test.Prop…

遠程網絡視頻監視技術

目前要實現廣域網視頻監視&#xff0c;主要通過三種方式實現&#xff1a;1.硬盤錄像機&#xff1b;2.網絡視頻服務器&#xff1b;3.網絡攝像機。 硬盤錄像機是一個以錄像為主的設備&#xff0c;有的可以支持IE瀏覽。網絡視頻服務器一般前端不錄像&#xff0c;直接將影像傳輸到…

Deepin下java開發環境部署

簡介 本經驗由深度論壇用戶(zhang12345shun)分享&#xff0c;原文地址 正文 SUN JDK&#xff08;現已改名Oracle JDK&#xff09; 1.下載Sun版JDK壓縮包&#xff08;.tar.gz&#xff09;&#xff0c;選擇其中的32/64位Linux版本。 2.將其解壓縮&#xff1a; sudo tar -zx…

判斷ic卡類型

傳15讀卡片數據 判斷data8的status是否為0&#xff0c;是則是ic 否則就是磁條卡 根據二磁道數據識別是IC卡還是磁條卡 根據二磁道符號后面第一位識別。規則是 該數字 6 或者 2 則該卡是IC卡&#xff0c;否則是普通磁條卡 轉載于:https://www.cnblogs.com/wubenhui/p/6956256.h…

python常用代碼_Python常用算法學習(3)(原理+代碼)——最全總結

1&#xff0c;什么是算法的時間和空間復雜度算法(Algorithm)是指用來操作數據&#xff0c;解決程序問題的一組方法&#xff0c;對于同一個問題&#xff0c;使用不同的算法&#xff0c;也許最終得到的結果是一樣的&#xff0c;但是在過程中消耗的資源和時間卻會有很大的區別。那…

數據監測驅動下的信息流廣告優化

信息流廣告是什么 “今日頭條和百度必有一戰”&#xff0c;相信不少的互聯網人在過去幾個月都聽到過類似的斷言。定位于信息分發平臺的今日頭條和主營搜索業務的百度會產生如此大的利益沖突&#xff0c;最核心的點其實就是信息流廣告。 信息流廣告指的是在用戶使用互聯網產品或…

在idea中使用git管理你的項目

起步 idea是十分智能的Java集成開發環境 而我們在用idea寫項目的時候經常遇到版本控制的問題,而git工具如果你只會在終端中的git命令來進行控制,可能會使得效率低下 今天小編就教大家在idea中使用git來管理你的項目 首先創建一個項目 點擊create new projects 這里選擇默認…

react-native熱更新插件react-native-code-push

使用react-native-code-push插件來實現熱更新的時候&#xff0c;會遇到一些問題。下面這個問題就讓我差點崩潰了。 在測試 Production 和 Staging 是否會去檢查各自環境下的bundle文件&#xff0c;我就遇到了混亂的問題。 有時候用 Release 打包出來的app會去檢查 Staging 下的…

《工業控制網絡安全技術與實踐》一一第3章 工業控制網絡安全威脅

第3章 工業控制網絡安全威脅 第2章介紹了工業控制系統的相關知識。本章主要介紹工業控制網絡的基本知識&#xff0c;并詳細介紹工業控制網絡的常見安全威脅。之后&#xff0c;分析工業控制系統的脆弱性。

多媒體視頻知識入門貼zt(二)

2.2 音視頻基本概念介紹 2.2.1 視頻的基本概念 RGB和YUV RGB指的是紅綠藍&#xff0c;應用還是很廣泛的&#xff0c;比如顯示器顯示&#xff0c;BMP文件格式中的像素值等&#xff1b;而YUV主要指亮度和兩個色差信號&#xff0c;被稱為luminance和chrominance他們的轉化關系可以…