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.
圖書館(SparkR)df<-createDataFrame(忠實的)顯示DataFrame的內容到標準輸出頭(df)
使用數據源API
從數據源創建DataFrame的一般方法是read.df
.此方法接受要加載的文件的路徑和數據源的類型。SparkR支持本機讀取CSV、JSON、文本和Parquet文件。
圖書館(SparkR)diamondsDF<-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文件。
需要(SparkR)irisDF<-createDataFrame(虹膜)write.df(irisDF,源=“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.df(irisDF2,路徑=“dbfs: / tmp / iris.parquet”,源=“鋪”,模式=“覆蓋”)
% fs ls dbfs: / tmp / iris.parquet
DataFrame操作
Spark DataFrames支持許多函數來進行結構化數據處理。這裏有一些基本的例子。完整的列表可以在API文檔.
選擇行和列
#導入SparkR包,如果這是一個新筆記本需要(SparkR)#創建DataFramedf<-createDataFrame(忠實的)
#隻選擇“噴發”列頭(選擇(df,df$火山噴發))
您也可以將列名作為字符串傳入頭(選擇(df,“爆發”))
篩選數據幀,隻保留等待時間小於50分鍾的行頭(過濾器(df,df$等待<50))
機器學習
SparkR公開了大多數MLLib算法。在底層,SparkR使用MLlib來訓練模型。
下麵的例子展示了如何使用SparkR構建高斯GLM模型。要運行線性回歸,將family設置為“高斯”
.要運行邏輯回歸,將family設置為“二”
.當使用SparkML GLM時,SparkR自動執行分類特征的單熱編碼,因此不需要手動完成。除了String和Double類型特性之外,它還可以適合於MLlib Vector特性,以便與其他MLlib組件兼容。
#創建數據幀df<-createDataFrame(虹膜)#在數據集上擬合線性模型。模型<-全球語言監測機構(Sepal_Length~Sepal_Width+物種,數據=df,家庭=“高斯”)#模型係數以類似於R的原生glm()的格式返回。總結(模型)
教程,請參閱SparkR毫升教程.
有關其他示例,請參見在R中使用數據幀和表.