sparkr跑通函数 包含排序
spark1.4.0的sparkR的思路:用Spark从大数据集中抽取小数据(sparkR的DataFrame),然后到R里分析(DataFrame)。
这两个DataFrame是不同的,前者是分布式的,集群上的DF,R里的那些包都不能用;后者是单机版的DF,包里的函数都能用。
sparkR的开发计划,个人觉得是将目前包里的函数,迁移到sparkR的DataFrame里,这样就打开一片天地。
> a<- sql(hiveContext, "SELECT count(*) FROM anjuke_scores where restaurant>=10");
> a<- sql(hiveContext, "SELECT * FROM anjuke_scores limit 5")
> a
DataFrame[city:string, housingname:string, ori_traffic_score:int, ori_traffic_score_normal:double, metro_station:double, metro_station_normal:double,...
> first(a) #显示Formal Data Frame的第一行
> head(a) ; #列出a的前6行
> columns(a) # 列出全部的列
[1] "city" "housingname" "ori_traffic_score" "ori_traffic_score_normal"
[5] "metro_station" "metro_station_normal" "bus_station" "bus_station_normal" ...
> showDF(a)
> b<-filter(a, a$ori_comfort>8); # 行筛选, ori_comfort_normal:double
> print(a); #打印列名及类型
DataFrame[city:string, housingname:string, ori_traffic_score:int, ......
> printSchema(a); # 打印列名的树形框架概要 root |-- city: string (nullable = true) |-- housingname: string (nullable = true) |-- ori_traffic_score: integer (nullable = true) |-- ori_traffic_score_normal: double (nullable = true) |-- metro_station: double (nullable = true)
> take(a,10) ; # 提取Formal class DataFrame的前面num行,成为R中普通的 data frame , take(x, num)
city housingname ori_traffic_score ori_traffic_score_normal metro_station metro_station_normal
1 \t\x9a \xddrw\xb8 NA 0 NA 0
2 \t\x9a \xe4\xf04\u03a2\021~ NA 0 NA 0
3 \t\x9a \xf6\xe3w\xb8 NA 0 NA 0
4 \t\x9a \x8e=\xb0w\xb8 NA 0 NA 0
5 \t\x9a \t\x9a\xe4\xf04\xce\xe4\xf0~ NA 0 NA 0
6 \t\x9a q4\xfdE NA 0 NA 0
7 \t\x9a \xe4\xf04\xce NA 0 NA 0
8 \t\x9a )\xfdVT NA 0 NA 0
9 \t\x9a q\177V NA 0 NA 0
10 \t\x9a \xe4\xf04\xceW\xb8 NA 0 NA 0
> b<-take(a,10)
> dim(b)
[1] 10 41
> aa <- withColumn(a, "ori_comfort_aa", a$ori_comfort * 5) #用现有的列生成新的列, 新增一列,ori_comfort_aa,结果还是Formal data frame结构
> printSchema(aa)
root
|-- city: string (nullable = true)
.........
|-- comfort_normal: double (nullable = true)
|-- ori_comfort_aa: double (nullable = true)
> aa <- mutate(a, newCol1 = a$commerce_normal * 5, newCol2 = a$bank_normal * 2) ; #与withColumn类似
> printSchema(aa)
root
|-- city: string (nullable = true)
。。。。。。。。。。。。。。。。。。
|-- comfort_normal: double (nullable = true)
|-- newCol1: double (nullable = true)
|-- newCol2: double (nullable = true)
a1<-arrange(a,asc(a$level_tow)); # 按列排序, asc升序,desc降序
a1<-orderBy(a,asc(a$level_tow)); # 按列排序
count(a) ; # 统计 Formal Data Frame有多少行数据
> dtypes(a); #以list的形式列出Formal Data Frame的全部列名及类型
[[1]]
[1] "city" "string" [[2]]
[1] "housingname" "string"
> a<-withColumnRenamed(a,"comfort_normal","AA"); # 更改列名
> printSchema(a)
root
|-- city: string (nullable = true)
|-- housingname: string (nullable = true)
..........
|-- AA: double (nullable = true)
创建sparkR的数据框的函数createDataFrame
> df<-createDataFrame(sqlContext,a.df); # a.df是R中的数据框, df是sparkR的数据框,注意:使用sparkR的数据库,需要sqlContext
> str(a.df)
'data.frame': 5 obs. of 41 variables:
> str(df)
Formal class 'DataFrame' [package "SparkR"] with 2 slots
..@ env:<environment: 0x4fce350>
..@ sdf:Class 'jobj' <environment: 0x4fc70b0>
> destDF <- select(SFO_DF, "dest", "cancelled"); #选择列
> showDF(destDF); #显示sparkR的DF
+----+---------+
|dest|cancelled|
+----+---------+
| SFO| 0|
................
> registerTempTable(SFO_DF, "flightsTable"); #要对sparkDF使用SQL语句,首先需要将DF注册成一个table
> wa <- sql(sqlContext, "SELECT dest, cancelled FROM flightsTable"); #在sqlContext下使用SQL语句
> showDF(wa); #查询的结果还是sparkDF
+----+---------+
|dest|cancelled|
+----+---------+
| SFO| 0|
................
> local_df <- collect(wa); #将sparkDF转换成R中的DF
> str(local_df)
'data.frame': 2818 obs. of 2 variables:
$ dest : chr "SFO" "SFO" "SFO" "SFO" ...
$ cancelled: int 0 0 0 0 0 0 0 0 0 0 ...
> wa<-flights_df[1:1000,]; #wa是R中的DF
> flightsDF<-createDataFrame(sqlContext,wa) ; #flightsDF是sparkR的DF
> library(magrittr); #管道函数的包对sparkRDF适用
> groupBy(flightsDF, flightsDF$date) %>%
+ summarize(avg(flightsDF$dep_delay), avg(flightsDF$arr_delay)) -> dailyDelayDF; #注意,语法和dplyr中的有所不同,结果还是sparkRDF
> str(dailyDelayDF)
Formal class 'DataFrame' [package "SparkR"] with 2 slots
..@ env:<environment: 0x4cd3118>
..@ sdf:Class 'jobj' <environment: 0x4cd6968>
> showDF(dailyDelayDF)
+----------+--------------------+--------------------+
| date| AVG(dep_delay)| AVG(arr_delay)|
+----------+--------------------+--------------------+
|2011-01-01| 5.2| 5.8|
|2011-01-02| 1.8333333333333333| -2.0|
................
在39机器上跑的
collect将sparkDF转化成DF
Collects all the elements of a Spark DataFrame and coerces them into an R data.frame.
collect(x, stringsAsFactors = FALSE),x:A SparkSQL DataFrame
> dist_df<- sql(hiveContext, "SELECT * FROM anjuke_scores where restaurant<=1");
> local_df <- dist_df %>%
groupBy(dist_df$city) %>%
summarize(count = n(dist_df$housingname)) %>%
collect
> local_df
city count
1 \t\x9a 5
2 8\xde 7
3 \xf0\xde 2
..........
..........
take也可将sparkDF转化成DF
Take the first NUM rows of a DataFrame and return a the results as a data.frame
take(x, num)
> local_df <- dist_df %>%
groupBy(dist_df$city) %>%
summarize(count = n(dist_df$housingname))
> a<-take(local_df,100)
[Stage 16:=========================================> (154 + 1) / 199] > View(a)
> a
city count
1 \t\x9a 5
2 8\xde 7
3 \xf0\xde 2
..........
..........
不通的函数:
> describe(a)
Error in x[present, drop = FALSE] :
object of type 'S4' is not subsettable
> jfkDF <- filter(flightsDF, flightsDF$dest == "DFW")
Error in filter(flightsDF, flightsDF$dest == "DFW") :
no method for coercing this S4 class to a vector
sparkr跑通函数 包含排序的更多相关文章
- sparkR 跑通的函数
spark1.4.0的sparkR的思路:用spark从大数据集中抽取小数据(sparkR的DataFrame),然后到R里分析(DataFrame). 这两个DataFrame是不同的,前者是分布式 ...
- CocoStuff—基于Deeplab训练数据的标定工具【二、用已提供的标注数据跑通项目】
一.说明 本文为系列博客第二篇,主要讲述笔者在使用该团队提供已经标注好的COCO数据集进行训练的过程. 由于在windows中编译Caffe和Deeplab特别的麻烦,笔者并没有去探索,后续可能会去尝 ...
- 师傅领进门之6步教你跑通一个AI程序!
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云计算基础发表于云+社区专栏 源码下载地址请点击原文查看. 初学机器学习,写篇文章mark一下,希望能为将入坑者解点惑.本文介绍一些机 ...
- Ubuntu下跑通py-faster-rcnn、详解demo运作流程
在不同的服务器不同的机器上做过很多次实验,分别遇到各种不一样的错误并且跑通Py-Faster-RCNN,因此,在这里做一个流程的汇总: 一.下载文件: 首先,文件的下载可以有两种途径: 1.需要在官网 ...
- 使用sort函数进行排序
介绍 C++的一个重要组成部分STL(Standard Template Library),即标准模板库,是一些高级数据结构和算法的集合:高级数据结构(容器)主要包括list.set.vector.m ...
- Truffle3.0集成NodeJS并完全跑通(附详细实例,可能的错误)
Truffle3.0集成NodeJS并完全跑通(附详细实例,可能的错误) Truffle3.0集成NodeJS并完全跑通(附详细实例,可能的错误) 升级到Truffle3.0 如果之前安装的是Truf ...
- Windows下用cpu模式跑通目标检测py-faster-rcnn 的demo.py
关键字:Windows.cpu模式.Python.faster-rcnn.demo.py 声明:原文发表在博客园,未经允许不得转载!!!本篇blog过程已经多名读者实践验证,有人反馈报错TypeErr ...
- Python的lambda函数与排序
Python的lambda函数与排序 2010-03-02 15:02 2809人阅读 评论(0) 收藏 举报 lambdapythonlistlispclass工作 目录(?)[+] 前几天 ...
- 顶级测试框架Jest指南:跑通一个完美的程序,就是教出一群像样的学生
facebook三大项目:yarn jest metro,有横扫宇宙之势. 而jest项目的宗旨为:减少测试一个项目所花费的时间成本和认知成本. --其实,它在让你当一个好老师. jest文档非常简略 ...
随机推荐
- Shiro系列(0) - 权限管理在J2EE企业级开发中的应用与实战
其实也是应大家要求,讲一下权限管理,之前有讲过,但是没有拿出来细讲,这次索性录了视频从头到尾把shiro讲一遍.后续spring security会另外找个时间也讲一下. 主要内容会包括以下 1.了解 ...
- nodepad++ 正则 替换
(?<k1>.*?)\=(?<k2>.*?); cookie.Add(new CookieList() { Key = "\1", Value = &quo ...
- C语言:存取结构体成员的点运算符(.)和箭头运算符(->)的区别
转自:http://blog.csdn.net/taric_ma/article/details/7397362 一直以为这两个是没有什么区别的,可以相互替换,今天又翻了一下<C语言核心技术&g ...
- docker 安装MySQL远程连接
1. 下载Mysql的Docker镜像: $ docker search mysql (搜索mysql镜像) $ docker pull mysql (下载mysql镜像,默认最新版本) 2. 运行镜 ...
- MacOS Sierra10.12.4编译Android7.1.1源代码必须跳的坑
简单介绍 下载Android7.1.1源代码花费了两天,编译整个源代码相同花费了2天,期间遇到无数个坑. 如今编译源代码,一旦中间遇到错误,则要又一次開始. 本文记录编译过程遇到的问题及解决方式,如有 ...
- vue-cli+webpack在生成的项目中使用bootstrap方法(二)
vue-cli+webpack在生成的项目中使用bootstrap方法(一)中,是通过手动下载bootstrap库,然后手动添加到src/assets中,显然是过程太多. 当然是可以更省力些,可以通过 ...
- 【Android】HAL分析
HAL概述 以下是基于android4.0.3,对应其他低版本的代码,可能有所差异,但基本大同小异. Android的HAL是为了保护一些硬件提供商的知识产权而提出的,是为了避开linux的GPL束缚 ...
- c与c++相互调用机制分析与实现
c++通常被称为Better c,多数是因为c++程序可以很简单的调用c函数,语法上基本实现兼容.最常用的调用方式就是c++模块调用c实现的dll导出函数,很简单的用法,使用extern " ...
- hdu 4253(经典题目:二分+最小生成树)
题意:就是说有A.B两个公司要修路,有m条路,可能是属于A修的,也可能是属于B修的,现在要求所有路都联通的情况下的最小权值,并且A公司必须要修k条路. 同: 代码: #include<iostr ...
- IntelliJ IDEA maven库下载依赖包速度慢的问题
Reference: https://blog.csdn.net/qq1501340219/article/details/54638158 在pom.xml中添加maven 依赖包时,我就发现不管是 ...