raw_matrix %>% DT::datatable(options = list(pageLength = 30, dom = 'tip')) %>% DT::formatStyle(columns = c("A","B") background = styleColorBar(c(0, max(raw_matrix,na.rm = TRUE)), 'steelblue'), backgroundSize = '100% 50%', backgroundRepeat = 'no-repeat', backgroundPosition = 'center')
分布式DataFrame
DDF
DDF的全称是 Distributed Data Frame, 也就是分布式数据框。DDF用一个统一的跨引擎API简化了多数据源的分析操作,进一步将data frame底层的分布式傻瓜化。
在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三者中的联系
操作 | R | Python | Spark |
---|---|---|---|
库 | 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
,使用这样高性能的方法可以在关键步骤提升数据处理效率到极致,不过会牺牲一部分维护性。
参考资料
Medium:6 Differences Between Pandas And Spark DataFrames
Quora:What are the differences of DataFrame between R and Pandas?
R Tutorial: Data Frame
Python Pandas 官方文档
知乎:R语言读大数据?
知乎的高分问答:如何使用 ggplot2?
R Graphs Cookbook
SparkR: Distributed data frames with Spark and R
Vimeo:R Data Structures
Announcing SparkR: R on Spark
amplab: SparkR R frontend for Spark
codementor: data frame operations with SparkR
Spark Summit: Distributed DataFrame (DDF) Simplifying Big Data For The Rest Of Us
SparkR 官方文档
粉丝日志: 超高性能数据处理包data.table
yhat ggplot2 doc
Fast Data Processing with Spark, 2nd Edition
作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者 Harry Zhu 的 FinanceR专栏:https://segmentfault.com/blog...,如果涉及源代码请注明GitHub地址:https://github.com/harryprince。微信号: harryzhustudio商业使用请联系作者。
精彩评论