PySpark之算子综合实战案例《三》

一、词频统计

需求:统计一个或者多个文件中单词次数。文本样式如下:

分析:首先将文本数据读入转为为rdd,并通过flatmap进行切分成单词,然后进行map转化成(k,num),再通过reducebykey累加,

    def wordCount():
        # file = 'file:///Users/wangyun/Documents/BigData/script/data/data.txt'
        # sys.argv[1]
        rdd = sc.textFile(sys.argv[1])\
            .flatMap(lambda line:line.split("\t"))\
            .flatMap(lambda line:line.split(' '))\
            .map(lambda x:(x,1))\
            .reduceByKey(lambda a,b:a+b)
        output = rdd.collect()
        for (word,count ) in output:
            print("%s:%i"%(word,count))

输出结果

二、topN的统计

需求:统计一个或者多个文件中自媒体名称次数最多的前N个。文本样式如下:

分析:首先将多个文本数据读入转为为rdd,并通过map进行切分成单词,fliter过滤无效空数据,然后进行map转化成获取媒体号关键词,再通过map转化为(k,num),reducebykey将num相邻数据相加,再sortby排序,最后通过take算子取前N个。

    def myTpoN():
        #filepath = sys.argv[1]
        #通过路径读取文件夹下符合格式的数据文本
        filepath = '/Users/wangyun/Documents/CodeManager/qcttpyspider/logs/*.txt'
  
        counts = sc.textFile(filepath) \
            .map(lambda x: x.split(':  '))\
            .filter(lambda x:len(x)>1)\
            .map(lambda x:x[1])\
            .map(lambda x:x.split('-')[1])\
            .map(lambda x: x.rstrip())\
            .map(lambda x:(x,1))\
            .reduceByKey(lambda a,b:a+b)\
            .map(lambda x:(x[1],x[0]))\
            .sortByKey(False)\
            .map(lambda x:(x[1],x[0]))\
            .take(10)

        for (word, count) in counts:
            print("%s:%i" % (word, count))

        print(counts)

输出结果为:

[('山车之路', 6), ('汽车客', 6), ('小盒的车', 6), ('阿南说车', 6), ('环球汽车资讯', 6), ('车轮姐', 6), ('闹闹车', 6), ('粤声汽车音响改装', 6), ('骑着单车创未来', 6), ('忠哥说车', 6)]

 

 

三、平均数统计

需求:假设有一组数据为编号,年龄,计算这组数据中的平均年龄。数据样本如下:

需求,首先读取数据,并将编号和年龄进行分割,可以尝试过滤年龄大于100的异常值,这里不做演示。

    def myavage():
        filepath ='/Users/wangyun/Documents/BigData/App/spark-3.0.0-preview2-bin-hadoop2.7/data/simple_age.txt'
        rdd = sc.textFile(filepath)\
            .map(lambda x:x.split(' '))\
            .filter(lambda x:len(x)>1)\
            .map(lambda x:x[1])
        #.reduce(lambda a,b:a+b)
        rdd2 = rdd.map(lambda age:int(age)).reduce(lambda a,b:a+b)
        avage = rdd2/rdd.count()

        print(rdd2)
        print(avage)
        # print(rdd2.collect())

输出结果:

582
41.57142857142857

以上使用了Spark RDD操作,常用算子《二》进行了综合使用。

 

 

 

相关推荐:

hadoop,pySpark环境安装与运行实战《一》
Spark RDD操作,常用算子《二》
PySpark之算子综合实战案例《三》
Spark运行模式以及部署《四》
Spark Core解析《五》
PySpark之Spark Core调优《六》
PySpark之Spark SQL的使用《七》
 

 

 

持续更新中...

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风雨「83」

你的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值