比较SparkR和sparklyr
R之间的用户可以选择两个api Apache火花:SparkR和sparklyr。本文比较了这些api。砖建议你选择其中一个api来开发一个火花应用r .从这两种api结合代码到一个脚本或砖笔记本或工作可以使你的代码更难以阅读和维护。
API的起源
SparkR引发社会的构建和开发人员从砖。正因为如此,SparkR密切遵循的火花Scala类和DataFrame API。
sparklyr开始时RStudio和已经被Linux基金会捐赠。sparklyr紧密集成到tidyverse通过API编程风格和互操作性dplyr。
SparkR和sparklyr具有很强的处理大数据在r .在过去的几年中,他们的特性集接近平价。
API的差异
以下代码示例展示了如何使用SparkR和sparklyr砖笔记本读的CSV文件样本数据集火花。
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ## SparkR用法#注意:SparkR加载到一个砖笔记本,运行以下:#库(SparkR)#你可以移除“SparkR::”下面的函数调用。# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##使用SparkR读航空公司2008年的数据集。airlinesDF< -SparkR::read.df(路径=“databricks-datasets / asa /航空/ 2008. csv”,源=“csv”,inferSchema=“真正的”,头=“真正的”)#打印数据集加载的类名。猫(“SparkR对象:类”,类(airlinesDF),“\ n”)#输出:## SparkR对象的类:SparkDataFrame# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ## sparklyr用法#注意:安装、加载和联系sparklyr砖的笔记本,#运行以下:# install.packages (“sparklyr”)#库(sparklyr)# sc < - sparklyr: spark_connect(方法=“砖”)#如果你运行”库(sparklyr)”,you can then remove "sparklyr::" from the#前“spark_connect”和下面的函数调用。# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##使用sparklyr读航空公司2007年的数据集。airlines_sdf< -sparklyr::spark_read_csv(sc=sc,的名字=“航空公司”,路径=“databricks-datasets / asa /航空/ 2007. csv”)#打印数据集加载的类名。猫(“sparklyr对象:类”,类(airlines_sdf))#输出:## sparklyr对象的类:tbl_spark tbl_sql tbl_lazy台
然而,如果你试图运行sparklyr函数SparkDataFrame
从SparkR对象,或者如果你试图运行一个SparkR函数上tbl_spark
从sparklyr对象,它不会工作,如以下代码示例所示。
#试图调用sparklyr函数SparkR SparkDataFrame对象。它不会工作。sparklyr::sdf_pivot(airlinesDF,DepDelay~UniqueCarrier)#输出:#错误:无法检索火花DataFrame SparkDataFrame对象的类# #现在试图调用s火花R函数sparklyr tbl_spark对象。它也不会工作。SparkR::安排(airlines_sdf,“DepDelay”)#输出:##错误(函数(类、fdef mtable):#无法找到一种遗传方法函数“安排”签名的“tbl_spark”、“性格”
这是因为sparklyr翻译dplyr等功能安排
到一个SQL查询计划SparkSQL所使用。与SparkR情况不是这样,这为SparkSQL表和火花DataFrames功能。这些行为是为什么砖不建议结合SparkR和sparklyr api相同的脚本,笔记本,或者工作。
API的互操作性
在极少数情况下,你无法避免结合SparkR和sparklyr api,您可以使用SparkSQL作为一种桥。例如,在本文的第一个例子,sparklyr从2007年航空公司数据集加载到一个表命名航空公司
。您可以使用SparkRsql
函数查询这个表,例如:
top10delaysDF< -SparkR::sql(“选择UniqueCarrier,DepDelay,起源从航空公司在哪里DepDelay不像“NA”ORDER BY DepDelayDESC限制10”)#打印查询结果的类名。猫(“阶级的top10delaysDF:“,类(top10delaysDF),“\ n \ n”)#显示查询结果。猫(“2007年十大航空公司延误:\ n \ n”)头(top10delaysDF,10)#输出:## top10delaysDF类:SparkDataFrame## 2007年十大航空公司延误:## UniqueCarrier DepDelay起源# 1 AA 999汽车# 2西北999英文文宣写作研习营# 3 AA 999 PHL# 4 998 RST MQ# 5 9 e 997 SWF# 6 996 DFW AA# 7西北996窝# 8 MQ 995印第安纳州# 9 994 SJT MQ# 993 MSY AA
附加的例子,请参阅在R DataFrames和表工作。