在R中使用DDF,我们不需要修改之前任何的代码,并且绕过Hadoop的绝对限制,就可以让data frame格式的数据,自动获得分布式处理的能力!
# 创建 DDF 管理器来运行Spark引擎 dm <- DDFManager("spark") # 从表格中创建 DDF ddf <- sql2ddf(dm, "select * from mtcars") /*Basic Stats*/ # 返回行/列的值 ncol(ddf) nrow(ddf) # 在 DDF 上进行运行标准汇总 summary(ddf)更多具体操作可以参考官方指南
DataFrame在R、Python和Spark三者中的联系 操作RPythonSpark库 base Pandas spark SQL
读取csv read.csv() read_csv() spark-csv
计数 nrow() pandasDF.count() sparkDF.count()
分片 head(data,5) pandasDF.head(5) sparkDF.show(5)
推断类型 自动推断 自动推断 默认为string类型
标准差计算中的NaN处理 视为NA 自动排除 视为NaN
特征工程 dplyr::mutate() pandasDF[\'new\'] sparkDF.withColumn()
DataFrame 之我见
处理数据的第一语言还是 SQL语句,因为SQL是DSL,这样就对使用者没有Python或者R的要求,也方便与DBA的维护。在R中可以使用 sqldf 通过SQL直接操作DataFrame,在Python中可以使用 pysqldf。
处理数据的第二语言则是 tidyverse 或者 pandas,使用这样的链式调用方法可以提升数据流的处理效率,规避一些原生SQL在不同数据库中执行情况不同或者可读性较差的问题。
处理数据的第三语言则是 data.table 或者 scala,使用这样高性能的方法可以在关键步骤提升数据处理效率到极致,不过会牺牲一部分维护性。