Spark DataFrames入門指南:建立和操作DataFrame
一、從csv檔案建立DataFrame
本文將介紹如何從csv檔案建立DataFrame。
如何做?
從csv檔案建立DataFrame主要包括以下幾步驟:
1、在build.sbt檔案裡面新增spark-csv支援庫;
2、建立SparkConf物件,其中包括Spark執行所有的環境資訊;
3、建立SparkContext物件,它是進入Spark的核心切入點,然後我們可以通過它建立SQLContext物件;
4、使用SQLContext物件載入CSV檔案;
5、Spark內建是不支援解析CSV檔案的,但是Databricks公司開發了一個類庫可以支援解析CSV檔案。所以我們需要把這個依賴檔案載入到依賴檔案中(pom.xml或者是build.sbt)
如果你是SBT工程,請加入以下依賴到build.sbt檔案中:
- libraryDependencies += "com.databricks" % "spark-csv_2.10" % "1.3.0"
如果你是Maven工程,請加入以下依賴到pom.xml檔案中:
- <dependency>
- <groupid>com.databricks</groupid>
- <artifactid>spark-csv_2.10</artifactid>
-
<version>1.3.0</version>
- </dependency>
6、SparkConf持有所有執行Spark程式的資訊,在這個例項中,我們將以本地的方式執行這個程式,而且我們打算使用2個核(local[2]),部分程式碼片段如下:
- import org.apache.spark.SparkConf
- val conf = new SparkConf().setAppName("csvDataFrame").setMaster("local[2]")
7、使用SparkConf初始化SparkContext物件,SparkContext是進入Spark的核心切入點:
- val sc = new SparkContext(conf)
在Spark中查詢資料最簡單的一種方式就是使用SQL查詢,所以我們可以定義一個SQLContext物件:
- val sqlContext=new SQLContext(sc)
8、現在我們就可以載入事先準備好的資料了:
- import com.databricks.spark.csv._
- val students=sqlContext.csvFile(filePath="StudentData.csv", useHeader=true, delimiter='|')
其中,students物件的型別是org.apache. spark.sql.DataFrame。
如何工作的
csvFile方法接收需要載入的csv檔案路徑filePath,如果需要載入的csv檔案有頭部資訊,我們可以將useHeader設定為true,這樣就可以將第一行的資訊當作列名稱來讀;delimiter指定csv檔案列之間的分隔符。
除了使用csvFile函式,我們還可以使用sqlContext裡面的load來載入csv檔案:
- val options = Map("header" -> "true", "path" -> "E:\\StudentData.csv")
- val newStudents = sqlContext.read.options(options).format("com.databricks.spark.csv").load()
附錄
為了方便大家測試,我提供了StudentData.csv檔案的部分資料集:
- id|studentName|phone|email
- 1|Burke|1-300-746-8446|ullamcorper.velit.[email protected]
- 2|Kamal|1-668-571-5046|[email protected]
- 3|Olga|1-956-311-1686|[email protected]
- 4|Belle|1-246-894-6340|[email protected]
- 5|Trevor|1-300-527-4967|[email protected]
- 6|Laurel|1-691-379-9921|[email protected]
- 7|Sara|1-608-140-1995|[email protected]
- 8|Kaseem|1-881-586-2689|[email protected]
- 9|Lev|1-916-367-5608|[email protected]
- 10|Maya|1-271-683-2698|[email protected]
- 11|Emi|1-467-270-1337|[email protected]nunc.com
- 12|Caleb|1-683-212-0896|[email protected]
- 13|Florence|1-603-575-2444|[email protected]
- 14|Anika|1-856-828-7883|[email protected]
- 15|Tarik|1-398-171-2268|[email protected]
- 16|Amena|1-878-250-3129|[email protected]
- 17|Blossom|1-154-406-9596|[email protected]
- 18|Guy|1-869-521-3230|[email protected]
- 19|Malachi|1-608-637-2772|[email protected]
- 20|Edward|1-711-710-6552|[email protected]
二、從Scala case class中建立DataFrame
在這篇文章中,你將學到如何從Scala case class中建立DataFrame。
如何做?
1、我們首先建立一個case class,名為Employee,並且定義id和name兩個引數,如下:
- case class Employee(id: Int, name: String)
和先前一樣,我們分別定義SparkConf、SparkContext以及SQLContext:
- val conf = new SparkConf().setAppName("colRowDataFrame"). setMaster("local[2]")
- val sc = new SparkContext(conf)
- val sqlContext = new SQLContext(sc)
2、我們可以通過很多方式來初始化Employee類,比如從關係型資料庫中獲取資料以此來定義Employee類。但是在本文為了簡單起見,我將直接定義一個Employee類的List,如下:
- val listOfEmployees = List(Employee(1, "iteblog"), Employee(2, "Jason"), Employee(3, "Abhi"))
3、我們將listOfEmployees列表傳遞給SQLContext類的createDataFrame 函式,這樣我們就可以創建出DataFrame了!然後我們可以呼叫DataFrame的printuSchema函式,打印出該DataFrame的模式,我們可以看出這個DataFrame主要有兩列:name和id,這正是我們定義Employee的兩個引數,並且型別都一致。
- val empFrame = sqlContext.createDataFrame(listOfEmployees)
- empFrame.printSchema
- root
- |-- id: integer (nullable = false)
- |-- name: string (nullable = true)
之所以DataFrame打印出的模式和Employee類的兩個引數一致,那是因為DataFrame內部通過反射獲取到的。
4、如果你對預設反射獲取到的模式名稱不感興趣,你可以通過withColumnRenamed函式來指定列名:
- val empFrameWithRenamedColumns = sqlContext.createDataFrame(listOfEmployees).withColumnRenamed("id", "empId")
- empFrameWithRenamedColumns.printSchema
- root
- |-- empId: integer (nullable = false)
- |-- name: string (nullable = true)
5、我們可以使用Spark支援的SQL功能來查詢相關的資料。在使用這個功能之前,我們必須先對DataFrame註冊成一張臨時表,我們可以使用registerTempTable函式實現,如下:
- empFrameWithRenamedColumns.registerTempTable("employeeTable")
6、現在我們就可以使用SQL語句來查詢DataFrame裡面的資料了:
- val sortedByNameEmployees = sqlContext.sql("select * from employeeTable order by name desc")
- sortedByNameEmployees.show()
- +-----+-------+
- |empId| name|
- +-----+-------+
- | 1|iteblog|
- | 2| Jason|
- | 3| Abhi|
- +-----+-------+
它如何工作的
createDataFrame函式可以接收一切繼承scala.Product類的集合物件:
- def createDataFrame[A <: Product : TypeTag](rdd: RDD[A]): DataFrame
而case class類就是繼承了Product。我們所熟悉的TupleN型別也是繼承了scala.Product類的,所以我們也可以通過TupleN來建立DataFrame:
- val mobiles=sqlContext.createDataFrame(Seq((1,"Android"), (2, "iPhone"))) mobiles.printSchema mobiles.show()
- root
- |-- _1: integer (nullable = false)
- |-- _2: string (nullable = true)
- +---+-------+
- | _1| _2|
- +---+-------+
- | 1|Android|
- | 2| iPhone|
- +---+-------+
我們知道,Tuple2的預設兩個引數名字分別是_1和_2,同樣,我們如果對這個預設的名字不是特別喜歡,我們也是可以通過withColumnRenamed函式對預設反射的列名進行重新命名。
三、操作DataFrame
在前面的文章中,我們介紹瞭如何建立DataFrame。本文將介紹如何操作DataFrame裡面的資料和打印出DataFrame裡面資料的模式
列印DataFrame裡面的模式
在建立完DataFrame之後,我們一般都會檢視裡面資料的模式,我們可以通過printSchema函式來檢視。它會打印出列的名稱和型別:
- students.printSchema
- root
- |-- id: string (nullable = true)
- |-- studentName: string (nullable = true)
- |-- phone: string (nullable = true)
- |-- email: string (nullable = true)
如果採用的是load方式參見DataFrame的,students.printSchema的輸出則如下:
- root
- |-- id|studentName|phone|email: string (nullable = true)
對DataFrame裡面的資料進行取樣
列印完模式之後,我們要做的第二件事就是看看載入進DataFrame裡面的資料是否正確。從新建立的DataFrame裡面取樣資料的方法有很多種。我們來對其進行介紹。
最簡單的就是使用show方法,show方法有四個版本:
(1)、第一個需要我們指定取樣的行數def show(numRows: Int);
(2)、第二種不需要我們指定任何引數,這種情況下,show函式預設會加載出20行的資料def show();
(3)、第三種需要指定一個boolean值,這個值說明是否需要對超過20個字元的列進行擷取def show(truncate: Boolean);
(4)、最後一種需要指定取樣的行和是否需要對列進行截斷def show(numRows: Int, truncate: Boolean)。實際上,前三個函式都是呼叫這個函式實現的。
Show函式和其他函式不同的地方在於其不僅會顯示需要列印的行,而且還會打印出頭資訊,並且會直接在預設的輸出流打出(console)。來看看怎麼使用吧:
- students.show() //打印出20行
- +---+-----------+--------------+--------------------+
- | id|studentName| phone| email|
- +---+-----------+--------------+--------------------+
-
相關推薦
Spark DataFrames入門指南:建立和操作DataFrame
一、從csv檔案建立DataFrame 本文將介紹如何從csv檔案建立DataFrame。 如何做? 從csv檔案建立DataFrame主要包括以下幾步驟: 1、在build.sbt檔案裡面新增spark-csv支援庫; 2、建立Sp
Linux小小白入門教程(六):建立和刪除資料夾
以下操作在Linux終端進行。Linux因為許可權非常嚴格,所以暫時所有的命令操作全部是在/home資料夾下的/yangjw資料夾下進行。/yangjw資料夾就是登入使用者名稱所在的資料夾,出了此資料
PyCharm入門第一步(四):建立和執行第一個Django專案
步驟4:建立和執行您的第一個Django專案 注:此功能僅在專業版中受支援。 在你開始之前 您正在使用PyCharm 2016.1或更高版本。 您的計算機上至少安裝了一個Python直譯器。 你已經安裝了Django包。 本教程是使用以下假設建立的: Py
Apache Kafka程式設計入門指南:設定分割槽數和複製因子
我們學習瞭如何編寫簡單的Kafka Producer程式。在那個例子中,在如果需要傳送的topic不存在,Producer將會建立它。我們都知道(假設你知道),每個topic都是有分割槽數和複製因子的,但是我們無法通過Producer相關的API設定分割槽數和複製因子的,
spark dataframe建立和操作
對spark進行操作 1獲取spark環境 JavaSparkContext getSparkContext 建立dataframe //獲取spark上下文資訊
【python】入門指南:控制語句
pan else pre 循環 clas python continue break for 條件控制 if,if-else,if-elseif-else #!/bin/python a = ‘test‘ if a == ‘test‘: print
Kubernetes之kubectl常用命令使用指南:1:建立和刪除
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
【python】入門指南:常用資料結構
Python內建了三種高階資料結構:list,tuple,dict list:陣列,相同型別的元素組成的陣列 tuple:元組,相同型別的元素組成的陣列,但是這裡有限定條件(長度是固定的,並且值也是固定的,不能被改變) dict:字典,k-v結構的 list陣列 1,初始化和遍歷li
Maven入門指南:倉庫
轉載https://blog.csdn.net/a258831020/article/details/49965803 1 . 倉庫簡介 沒有 Maven 時,專案用到的 .jar 檔案通常需要拷貝到 /lib 目錄,專案多了,拷貝的檔案副本就多了,佔用磁碟空間,且難於管理。Maven 使用
單元二:建立和維護資料表
1、 一個關係由一個二維表表示 2、 二維表中的每一列稱為關係的一個屬性,即欄位 3、 二維表中的每一行的所有資料稱為一個元組,相當一個記錄,代表一個實體 4、 能唯一標識一個元組的一個或若干個屬性的集合稱為
Excel零基礎入門——02Excel基本概念和操作
上節課大家已經體驗到了Excel的操作了,如果成功做完了小例子,那就更牛氣了,但只會操作不懂裡面的術語和原理就不太好了,本節課帶領大家初始熟悉一下Excel的環境、基本概念和基礎操作。咱要做個有文化的Excel人。 記住快捷鍵,秒殺老司機! 1、基本概念 大家把這裡當做字典,可以直接略過
SpringBoot 入門之一:Configuration 和 Properties
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2
Flutter 入門二:建立新的專案、開啟現有專案
文章目錄 1、建立新的Flutter專案 2、開啟現有的程式碼 3、執行 1、建立新的Flutter專案 1、File->New->New Flutter Project: 2、彈出如下對話方塊 選擇applicat
Spark快速入門指南 – Spark安裝與基礎使用
Apache Spark 是一個新興的大資料處理通用引擎,提供了分散式的記憶體抽象。Spark 正如其名,最大的特點就是快(Lightning-fast),可比 Hadoop MapReduce 的處理速度快 100 倍。此外,Spark 提供了簡單易用的 API,幾行程式碼
資料結構基礎篇-------4. 雙向迴圈連結串列的建立和操作
/* * 雙向迴圈連結串列的建立及操作 * 2018.10.23 * @L.F * * */ #include<stdio.h> #include<stdlib.h> #include<string.h> typedef
SQL語句基礎1:建立和刪除資料庫,建表,插入資料並加入適當約束
1.建立圖書管理資料庫 create database bookManager on ( name=bookManager_data, filename='D:\SQL\bookManager_data.mdf', size=5MB, maxs
WPF入門一:WPF和XAML簡介
什麼是WPFWindows Presentation Foundation的簡稱。專門用來編寫程式表示層的技術和工具。 學習WPF的好處:學習WPF技術可以為WCF的學習錦上添花。WF設計工作流,而設計WF的語言就是Xaml。學習WPF後,Silverlight可以算是會了80%,因為Silverlight可
哈夫曼樹的建立和操作
哈夫曼樹的引進是與帶有權重的二叉樹有關的 首先定義帶權路徑長度(WPL):設二叉樹有n個葉子結點,每個葉子結點帶有權值Wk,從根結點到每個葉子的長度為Ik,則每個葉子結點的帶權路徑長度之和就是:WPL=∑nk=1wklk。 最優二叉樹或哈夫曼樹:WPL最小的
30分鐘--Spark快速入門指南
Apache Spark 是一個新興的大資料處理通用引擎,提供了分散式的記憶體抽象。Spark 正如其名,最大的特點就是快(Lightning-fast),可比 Hadoop MapReduce 的處理速度快 100 倍。此外,Spark 提供了簡單易用的 API,幾行程式碼就能實現 WordCount。本
.NET windows服務(二:建立和解除安裝windows服務)
引用地址: https://docs.microsoft.com/zh-cn/dotnet/framework/windows-services/how-to-create-windows-services 手動安裝你的服務 在 Windows“啟動”選單或“啟動”螢幕上,依次選