Pyspark学习入门二:sort排序学习

    接触到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: ',output
    for (num, unitcount) in output:
        print num
    spark.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_list
    return res_list
    sc.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_list
    print 'python time is: ',s2-s1
    print ' spark time is: ',s3-s2




if __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
656757

res_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.00200009346008
 spark time is:  0.908999919891

data_list1==res_list:  True
python time is:  0.0309998989105
 spark time is:  0.503000020981

data_list1==res_list:  True
python time is:  0.530999917984
 spark time is:  3.49399995804

    学习了!

猜你喜欢

转载自blog.csdn.net/Together_CZ/article/details/83181568