Why SparkR
Spark 是一種與 Hadoop 相似的開源集群計算環(huán)境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現(xiàn)得更加優(yōu)越,換句話說,Spark 啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負載 。
而Spark力圖整合機器學習(MLib)、圖算法(GraphX)、流式計算(Spark Streaming)和數(shù)據(jù)倉庫(Spark SQL)等領域,通過計算引擎Spark,彈性分布式數(shù)據(jù)集(RDD),架構出一個新的大數(shù)據(jù)應用平臺。
SparkR 是一個提供輕量級前端的 R 包,在 R 的基礎上加入了 Spark 的分布式計算和存儲等特性。在 Spark 1.6.1 中,SparkR 提供了一個分布式數(shù)據(jù)框(DataFrame)的實現(xiàn),它能夠支持諸如選取、過濾和聚集等操作。這個特性與 R 語言自身提供的特性類似,但 SparkR 能夠作用于更大規(guī)模的數(shù)據(jù)集。SparkR 是一個提供輕量級前端的 R 包,在 R 的基礎上加入了 Spark 的分布式計算和存儲等特性。匯集了spark和R本身的諸多優(yōu)點,如下圖。

SparkR是什么.png

SparkR的架構.png
How to use it?
- SparkR特有SparkDataFrame

SparkDataFrame的特點.png

SparkDataFrame的例子.png
SparkDataFram要實現(xiàn)MapReduce的函數(shù)式操作
- dapply
- dapplyCollect
- gapply
其中dapply的框架如下圖所示:

dapply的框架.png
dapply 的用法:
- dapply(x,fun,schema)
- dapply(x,fun)
- 把fun函數(shù)應用到SparkDataFrame的每一個數(shù)據(jù)切片,然后把結果收集回本機成為data.frame;
- R函數(shù)的輸入、輸出均為data.frame
- 指定schema,R函數(shù)輸出必須匹配schema
- example:
df <- creatDataFrame(sqlContext,mtcars)
df1 <- dapply(df,functuion(x){x+1},schema(df))
dapplyCollect
其中dapply的框架如下圖所示:
ldf <- dapplyCollect(df,function(x){x+1})