跳轉到主要內容

Apache火花™教程:開始使用Apache火花磚

概述

Apache火花數據集的API提供類型安全的,麵向對象的編程接口。DataFrame一個無類型別名嗎數據集(行)。數據集提供編譯時類型安全則意味著生產應用程序可以檢查錯誤答案之前他們允許直接操作在用戶定義的類。數據集API還提供高級領域特定語言操作sum (),avg (),加入(),select (),groupBy (),使代碼更容易表達,閱讀,和寫作。

模塊在本教程中,您將學習如何:

  • 創建示例數據
  • 加載示例數據
  • 視圖的數據集
  • 過程和可視化數據集

我們也提供一個樣的筆記本你可以導入訪問和運行的所有代碼示例包含在模塊。

創建示例數據

有兩種方法可以創建數據集:動態,通過閱讀從JSON文件使用SparkSession。首先,原始類型的例子或演示,您可以創建數據集在Scala或Python筆記本或火花示例應用程序。例如,這裏有一個方法來創建一個數據集的100個整數筆記本。我們使用火花變量來創建100個整數數據集(長)

/ / 100數據來創建一個數據集。val range100 = spark.range (One hundred.)range100.collect ()

輸出一個簡單的數據集

加載示例數據

更常見的方法是讀取數據文件從外部數據源,HDFS, blob存儲、NoSQL, RDBMS或本地文件係統。火花支持多種格式:JSON、CSV、文本、拚花,獸人等等。讀取JSON文件,您還可以使用SparkSession變量火花

開始使用數據集的最簡單方法是使用磚中可用數據集的一個例子/ databricks-datasets在磚工作區文件夾訪問。

val df = spark.read.json (“/ databricks-datasets /樣本/人/ people.json”)

在讀取JSON文件,火花不知道您的數據的結構。也就是說,它不知道如何組織你的數據到一個JVM typed-specific對象。它試圖推斷出從JSON文件並創建一個模式DataFrame =數據集(行)通用的對象。

您可以顯式地轉換DataFrame成一個數據集反映了Scala類對象通過定義一個特定領域的Scala用例類和把DataFrame轉換成類型:

/ /首先,定義一個類代表一個特定於類型的Scala JVM對象情況下(名字:字符串,年齡:長)/ /讀取JSON文件,DataFrames轉換為特定類型的JVM Scala對象/ /人。在這個階段的火花,在閱讀JSON,創建了一個通用的/ / DataFrame =數據集(行)。通過顯式地將DataFrame轉化為數據集/ /結果在一個特定於類型的行或對象集合類型的人val ds= spark.read.json (“/ databricks-datasets /樣本/人/ people.json”)。as[人]

你可以做類似的JSON文件中捕獲與物聯網設備狀態信息:定義一個用例類讀取JSON文件,轉換DataFrame =數據集[DeviceIoTData]

將有兩個原因DataFrame為一個特定類型的JVM對象。首先,顯式轉換後,對所有關係和使用數據集API查詢表達式,得到編譯類型安全。例如,如果您使用一個過濾器操作使用錯誤的數據類型,火花檢測不匹配類型和問題一個編譯錯誤而執行運行時錯誤,這樣你捕獲錯誤。第二,數據API提供了高階方法,使代碼更容易閱讀和培養。一節中過程和可視化數據集,注意使用數據集類型對象使代碼更易於表達和閱讀。

就像在示例中,創建一個用例類封裝了Scala對象。訪問文件,其中包含物聯網數據,加載文件/ databricks-datasets /物聯網/ iot_devices.json

/ /定義一個類,代表了設備數據。情況下DeviceIoTData(battery_level:長,c02_level:長,cca2:字符串,cca3:字符串,cn:字符串,device_id:長,device_name:字符串,濕度:長,知識產權:字符串,緯度:雙,經度:雙,規模:字符串,臨時:長,時間戳:長)/ /讀取JSON文件並創建的數據集“‘DeviceIoTData案例類/ / ds現在DeviceIoTData JVM Scala對象的集合val ds= spark.read.json (“/ databricks-datasets /物聯網/ iot_devices.json”)。as [DeviceIoTData]

查看數據集

查看數據以表格格式而不是出口到第三方的工具,您可以使用磚顯示()命令。一旦你加載JSON數據轉換成一個數據集特定類型的JVM對象的集合,你可以把它們作為你會查看DataFrame通過使用顯示()或標準火花命令,如帶(),foreach (),println ()API調用。

/ /顯示表剛從JSON文件讀入數據集顯示器(ds)
/ /使用標準的火花命令,把()和foreach(),打印第一/ /數據集的10行。ds.take (10)。foreach(println (_))打印第一個10行數據集

過程和可視化數據集

一個數據集轉換和行動。最重要的是高層次的領域特定操作等sum (),select (),avg (),加入(),聯盟()。有關更多信息,請參見Scala API的數據集

在這個示例中,您可以使用filter (),map (),groupBy (),avg (),所有的高級方法,創建新的數據集。值得注意的是,您可以訪問的屬性中定義的名字用例類。也就是說,使用點符號來訪問單個字段。因此,它使代碼易於閱讀和寫作。

/ /過濾掉所有設備的溫度超過25度和生成/ /另一個數據集和三個感興趣的領域,然後顯示/ /映射的數據集val dsTemp = ds.filter (d= >d。臨時>25). map (d= >(d。臨時,d.device_name d.cca3)顯示器(dsTemp)

顯示()的輸出過濾數據集

/ /數據集應用高級API方法如groupBy()和avg ()。/ /過濾溫度> 25,以及它們的對應/ /設備的濕度,計算平均值,groupBy cca3國家代碼,/ /並顯示結果,使用表格和柱狀圖val dsAvgTmp = ds.filter (d= >{d。臨時>25}). map (d= >(d。臨時,d。濕度、d.cca3) .groupBy(美元)“_3”).avg ()/ /顯示平均表,由國家進行分組顯示器(dsAvgTmp)

作為一個表顯示數據集平均

//選擇單個字段使用數據集方法選擇()//在哪裏battery_level大於6。注意這高- - - - - -水平//具體的語言API讀取就像一個SQL查詢顯示器(ds。選擇($"battery_level", $"c02_level", $"device_name").在哪裏(美元“battery_level”>6).sort (“c02_level”美元))

選擇單個字段使用數據集的方法選擇()
這是一個gif動畫顯示表映射到多快你可以從圖表使用的數據集和數據磚顯示()命令。
提供可視化的例子在磚的顯示()命令
使用磚的一個額外的好處顯示()命令,可以快速查看這些數據的嵌入式可視化。例如,在一個新細胞,可以發出SQL查詢和點擊地圖查看數據。但首先你必須保存數據集,ds作為一個臨時表。

/ /注冊你的數據集作為一個臨時表,可以發出SQL查詢ds.createOrReplaceTempView (“iot_device_data”)

在拯救了數據集DeviceIoTData臨時表,可以發出SQL查詢。

%sql選擇cca3,(截然不同的device_id)作為device_idiot_device_data集團通過cca3訂單通過device_iddesc限製One hundred.

截圖顯示在一個數據集的映射表

我們也提供一個樣的筆記本你可以導入訪問和運行的所有代碼示例包含在模塊。

額外的資源

繼續下一個模塊:

Baidu
map