SparkR概述

SparkR是一個R包,提供了使用Apache Spark的輕量級前端。SparkR還支持使用MLlib的分布式機器學習。

SparkR在筆記本

  • 對於Spark 2.0及以上版本,不需要顯式地傳遞sqlContext對象調用每個函數調用。

  • 對於Spark 2.2及以上版本,筆記本在默認情況下不再導入SparkR,因為SparkR函數與其他流行包中的同名函數衝突。要使用SparkR,你可以調用庫(SparkR)在你的筆記本電腦。SparkR會話已經配置好了,所有SparkR功能都將使用現有會話與附加的集群進行通信。

spark-submit job中的SparkR

您可以在Databricks上運行使用SparkR作為spark-提交作業的腳本,隻需要進行少量的代碼修改。示例請參見為R腳本創建並運行spark-submit作業

創建SparkR DataFrames

您可以從本地R創建一個數據幀data.frame,或者使用Spark SQL查詢。

來自一個當地的Rdata.frame

創建DataFrame最簡單的方法是轉換本地Rdata.frame成一個SparkDataFrame.具體來說,我們可以用createDataFrame並通過局部Rdata.frame創建一個SparkDataFrame.像大多數其他SparkR函數一樣,createDataFrame在Spark 2.0中更改了語法。您可以在下麵的代碼片段中看到這方麵的示例。有關更多示例,請參見createDataFrame

圖書館SparkRdf<-createDataFrame忠實的顯示DataFrame的內容到標準輸出df

使用數據源API

從數據源創建DataFrame的一般方法是read.df.此方法接受要加載的文件的路徑和數據源的類型。SparkR支持本機讀取CSV、JSON、文本和Parquet文件。

圖書館SparkRdiamondsDF<-read.df“/ databricks-datasets / Rdatasets /數據- 001 / csv / ggplot2 / diamonds.csv”“csv”“真正的”inferSchema“真正的”diamondsDF

SparkR自動從CSV文件推斷模式。

使用Spark Packages添加數據源連接器

通過Spark Packages,您可以找到流行文件格式(如Avro)的數據源連接器。作為示例,使用spark-avro包加載一個Avro文件。spark-avro包的可用性取決於您的集群圖片的版本.看到Avro文件

首先拿一個現有的data.frame,轉換為Spark DataFrame,並保存為Avro文件。

需要SparkRirisDF<-createDataFrame虹膜write.dfirisDF“com.databricks.spark.avro”路徑“dbfs: / tmp / iris.avro”模式“覆蓋”

使用實例驗證Avro文件是否被保存。

fsls/tmp/iris.avro

現在再次使用spark-avro包來讀取數據。

irisDF2<-read.df路徑“/ tmp / iris.avro”“com.databricks.spark.avro”irisDF2

數據源API還可以用於將DataFrames保存為多種文件格式。例如,您可以將前一個示例中的DataFrame保存到Parquet文件中write.df

write.dfirisDF2路徑“dbfs: / tmp / iris.parquet”“鋪”模式“覆蓋”
% fs ls dbfs: / tmp / iris.parquet

從一個Spark SQL查詢

您也可以使用Spark SQL查詢創建SparkR DataFrames。

#注冊之前的df為臨時視圖createOrReplaceTempViewirisDF2“irisTemp”
#使用Spark SQL查詢創建一個隻包含“物種”列的df物種<-sql“SELECT species FROM irisTemp”

物種是一個SparkDataFrame。

DataFrame操作

Spark DataFrames支持許多函數來進行結構化數據處理。這裏有一些基本的例子。完整的列表可以在API文檔

選擇行和列

#導入SparkR包,如果這是一個新筆記本需要SparkR#創建DataFramedf<-createDataFrame忠實的
#隻選擇“噴發”列選擇dfdf火山噴發))
您也可以將列名作為字符串傳入選擇df“爆發”))
篩選數據幀,隻保留等待時間小於50分鍾的行過濾器dfdf等待<50))

分組和聚合

SparkDataFrames支持許多常用的函數來在分組後聚合數據。例如,您可以計算每個等待時間在忠實數據集中出現的次數。

groupBydfdf等待)))
您還可以對聚合的輸出進行排序,以獲得最常見的等待時間waiting_counts<-groupBydfdf等待))安排waiting_countsdescwaiting_counts)))

列操作

SparkR提供了許多可以直接應用於列進行數據處理和聚合的函數。下麵的示例展示了基本算術函數的使用。

#將等待時間從小時轉換為秒。#你可以在同一個DataFrame中指定一個新列dfwaiting_secs<-df等待60df

機器學習

SparkR公開了大多數MLLib算法。在底層,SparkR使用MLlib來訓練模型。

下麵的例子展示了如何使用SparkR構建高斯GLM模型。要運行線性回歸,將family設置為“高斯”.要運行邏輯回歸,將family設置為“二”.當使用SparkML GLM時,SparkR自動執行分類特征的單熱編碼,因此不需要手動完成。除了String和Double類型特性之外,它還可以適合於MLlib Vector特性,以便與其他MLlib組件兼容。

#創建數據幀df<-createDataFrame虹膜#在數據集上擬合線性模型。模型<-全球語言監測機構Sepal_LengthSepal_Width+物種數據df家庭“高斯”#模型係數以類似於R的原生glm()的格式返回。總結模型

教程,請參閱SparkR毫升教程

有關其他示例,請參見在R中使用數據幀和表