接触到spark,才觉得很多东西并不是想象的那么简单的,不过这个并不能影响什么情绪,对于这个平台我还是很愿意多花点时间去学习熟悉一下的,忙里偷闲,找点时间,今天按照官方的API简单实践一下sort排序的内容,这些在我之前的博客里面有多很多讲解,都是借助python来原生态地实现的,这里是想用spark来做一下这个事情,主要包括两种,一种是读取数据文件进而对数据文件中的内容进行排序;另一种是直接输入数据列表来进行排序,下面是具体的实践。

#!usr/bin/env python
#encoding:utf-8'''
__Author__:沂水寒城
功能:基于 spark 的排序
'''import sys
import time
import random
from operator import gt
from pyspark.sql import SparkSession
from pyspark import SparkContext, SparkConf# conf=SparkConf().setAppName('PSApp').setMaster('local')
# sc=SparkContext(conf=conf)def sortFromFile(data_path='sort.txt'):'''从文件读取数据进行排序'''spark=SparkSession.builder.appName("PSApp").getOrCreate()lines = spark.read.text(data_path).rdd.map(lambda r: r[0])sortedCount=lines.flatMap(lambda x: x.split(' ')).map(lambda x: (int(x), 1)).sortByKey()output=sortedCount.collect()print 'output: ',outputfor (num, unitcount) in output:print numspark.stop()def sortFromList(data_list):'''对列表数据进行排序'''conf=SparkConf().setAppName('PSApp').setMaster('local')sc=SparkContext(conf=conf)rdd=sc.parallelize(data_list)res_list=rdd.sortBy(lambda x: x).collect()print 'res_list: ',res_listreturn res_listsc.stop()def timeCompare(num=10000):'''时间消耗对比'''data_list1,data_list2=[],[]for i in range(num):one_num=random.randint(-1000000,1000000)data_list1.append(one_num)data_list2.append(one_num)s1=time.time()data_list1.sort()s2=time.time()res_list=sortFromList(data_list2)s3=time.time()print 'data_list1==res_list: ',data_list1==res_listprint 'python time is: ',s2-s1print ' spark time is: ',s3-s2if __name__ == "__main__":sortFromFile(data_path='sort.txt')data_list=[123,3,4,657,0,234,21,3,4,-11,12334,-37,5567,43,222,3333,4563,6]sortFromList(data_list)timeCompare(num=10000)timeCompare(num=100000)timeCompare(num=1000000)

排序结果如下:

output:  [(-3, 1), (0, 1), (3, 1), (3, 1), (5, 1), (6, 1), (7, 1), (12, 1), (31,1), (32, 1), (34, 1), (45, 1), (77, 1), (90, 1), (99, 1), (111, 1), (222, 1), (
333, 1), (450, 1), (452, 1), (456, 1), (678, 1), (1112, 1), (656757, 1)]
-3
0
3
3
5
6
7
12
31
32
34
45
77
90
99
111
222
333
450
452
456
678
1112
656757res_list:  [-37, -11, 0, 3, 3, 4, 4, 6, 21, 43, 123, 222, 234, 657, 3333, 4563,
5567, 12334]

处于好奇,我想简单比对一下spark的排序效率和python原生态地排序功能谁更加强大一点,于是乎,做了一点小小的对比试验,可能是我的机子比较次吧,spark排序的性能均劣于python,不过这个仅仅是一个小实验哈

data_list1==res_list:  True
python time is:  0.00200009346008spark time is:  0.908999919891data_list1==res_list:  True
python time is:  0.0309998989105spark time is:  0.503000020981data_list1==res_list:  True
python time is:  0.530999917984spark time is:  3.49399995804

学习了!

Pyspark学习入门二:sort排序学习相关推荐

  1. (Python入门)学习笔记二,Python学习路线图

    (Python入门)学习笔记二,Python学习路线图 千里之行始于足下,谋定而后动,冰冻三尺非一日之寒.之所以说这三句话,就是对于下面整理的路线图,即不让自己感觉路途的遥远而感到达到巅峰神界的遥遥无 ...

  2. 强化学习(二)—— 价值学习(Value-Based)及DQN

    强化学习(二)-- 价值学习(Value-Based)及DQN 1. DQN介绍 2. TD算法介绍 3. 案例 1. DQN介绍 Deep Q Network 目标:最大化累计奖励(回报U) 通过神 ...

  3. VUE项目学习(二):学习项目文件结构

    VUE项目学习(二):学习项目文件结构 VUE项目结构: index.html:主页,项目入口 App.vue:根组件 main.js:入口文件 router文件夹下的index.js:路由配置文件 ...

  4. 【吐血推荐】机器学习/深度学习入门资料汇总及学习建议【入门必看】

    机器学习入门,初学者遇到的问题非常多,但最大的问题就是: 资料太多!!!看不完!!!不知道如何取舍!!! 一.机器学习的数学基础 正规的机器学习数学基础主要有: 数学分析(微积分),线性代数,概率论, ...

  5. 强化学习入门教程(附学习大纲)

    零基础,想要入门或从事强化学习研究的同学有福了! CSDN学院特邀资深讲师为大家分享<强化学习深入浅出完全教程>从零基础开始入门强化学习,在教学的过程中,配合   具体案例.代码演示 , ...

  6. 深度学习(二)——深度学习常用术语解释, Neural Network Zoo, CNN, Autoencoder

    Dropout(续) 除了Dropout之外,还有DropConnect.两者原理上类似,后者只隐藏神经元之间的连接. 总的来说,Dropout类似于机器学习中的L1.L2规则化等增加稀疏性的算法,也 ...

  7. 单片机学习入门 我们应该这样学习单片机

    单片机在学习入门的时候需要了解哪些内容呢?我们应该这样学习单片机: 首先:数字I/O的使用 使用按钮输入信号,发光二极管显示输出电平,就可以学习引脚的数字I/O功能,在按下某个按钮后,某发光二极管发亮 ...

  8. Android缓存学习入门(二)

    本文主要包括以下内容 内存缓存策略 文件缓存策略 内存缓存策略 当有一个图片要去从网络下载的时候,我们并不会直接去从网络下载,因为在这个时代,用户的流量是宝贵的,耗流量的应用是不会得到用户的青睐的.那 ...

  9. Tensorflow 学习入门(二) 初级图像识别——手写数字识别

    初级图像识别--手写数字识别 背景知识储备 Softmax Regression MNIST 矩阵相乘 One Hot 编码 Cross Entropy(交叉熵) 代码实现 引入数据 设计数据结构 完 ...

  10. Kinect学习(二):学习资源整理(转)

    转自:https://blog.csdn.net/zouxy09/article/details/8145688 刚刚接触Kinect,在网上狂搜资料,获得了很多有利于学习Kinect开发的资源,现整 ...

最新文章

  1. [转载]登录功能测试总结
  2. assert()函数用法总结【转】
  3. 查看android keystore 别名
  4. java读取系统中指定的文件_java读取jar中指定的文件
  5. 厉害了,ES 如何做到几十亿数据检索 3 秒返回!
  6. Python 骚操作!如何让自己在斗图中立于不败之地?
  7. /etc/services
  8. 适合做手机铃声的81首歌_“想下载这首歌作为你的手机铃声吗?”
  9. alchemy php,Flask SQLAlchemy
  10. 上海大学计算机学院客座教授,刘云虹教授受聘上海大学外国语学院客座教授并做学术讲座...
  11. react 手指移开_代码简介:React的五个死亡手指
  12. Java 将一段时间以周、月、季分割
  13. python文件是否存在_Python判断文件是否存在的三种方法
  14. cartographer探秘第五章之 Cartographer 所用到的 C++11 新特性
  15. 人员管理系统 java_员工管理系统java版
  16. 风控项目2---风控建模流程
  17. 中国5G牌照或于今日发放 我国将正式进入5G时代
  18. php新年计划,New Year’s Resolution |给20出头的你19条最赞的新年计划
  19. mysql按升序创建索引_MySQL 降序索引 (Descending Indexes)
  20. 原生 APP 与 web APP的区别比较

热门文章

  1. windows库的创建和使用:静态库+动态库
  2. 7-28 搜索树判断(25 分)
  3. 四 Lync Server 2013 部署指南-前端部署(1)
  4. vue $emit 父组件与子组件之间的通信(父组件向子组件传参)
  5. iOS应用架构谈 本地持久化方案及动态部署
  6. 热点:安全问题是否能将DNS推入云服务
  7. Spring 框架基础(03):核心思想 IOC 说明,案例演示
  8. Git分支基本命令+coding webhook+lnmp
  9. python使用sax实现xml解析
  10. 16汇编第十讲完结Call变为函数以及指令的最后讲解