1. 创建RDD有两种方式:①读取外部数据集,lines=sc.textFile("README.md")。②对一个集合进行并行化,lines=sc.parallelize(["zhangsan","lisi"])。

2.从http://files.grouplens.org/datasets/movielens/ml-100k.zip下载分析数据。到其目录中查看有几个重要的文件u.user(用户属性文件),u.item(电影元数据),u.data(用户对电影的评级)

3.启动pyspark,加载ml-100k文件中的数据,user_data=sc.textFile("/home/hadoop/ml-100k/u.user"),取其第一行数据检验是否加载成功user_data.first()。这是看见中间有大量日志。。严重干扰我们,这里可以设置日志,降低日志级别,只展示警告和错误。

4.分析数据,都是用"|"分割各行的数据,这将生成一个RDD,其中每一个记录对应一个Python列表,各列表由如下几个属性构成用户ID(user ID),年龄(age),性别(gender),职业(occupation)和邮编(ZIP code).对它们进行统计。。

>>> user_fields=user_data.map(lambda line:line.split("|"))

>>> num_users=user_fields.map(lambda fields:fields[0]).count()

>>> num_genders=user_fields.map(lambda fields:fields[2]).distinct().count()

>>> num_occupations=user_fields.map(lambda fields:fields[3]).distinct().count()

>>> num_ZIPcodes=user_fields.map(lambda fields:fields[4]).distinct().count()

>>> print"Users:%d,genders:%d,occ:%d,zipcodes:%d"%(num_users,num_genders,num_occupations,num_ZIPcodes)

输出结果:Users:943,genders:2,occ:21,zipcodes:795

5.接着用matplotlib的hist函数来创建一个直方图,以分析用户年龄的分布情况:hist(ages,bins=20,color='lightblue',normed=True)通过条形图反映量化比。。

6.了解用户的职业分布,首先用mapreduce(感觉spark中的这个方法比hadoop中的方便很多,而且速度也快很多)方法来计算数据集中个职业的出现次数。然后用matplotlib里面的bar函数绘制一个不同的条形图。

>>> count_by_occupation=user_fileds.map(lambda fields:(fields[3],1)).reduceByKey(lambda x,y:x+y).collect()

>>> print(count_by_occupation)

[(u'administrator', 79), (u'writer', 45), (u'retired', 14), (u'student', 196), (u'doctor', 7), (u'entertainment', 18), (u'marketing', 26), (u'executive', 32), (u'none', 9), (u'scientist', 31), (u'educator', 95), (u'lawyer', 12), (u'healthcare', 16), (u'technician', 27), (u'librarian', 51), (u'programmer', 66), (u'artist', 28), (u'salesman', 12), (u'other', 105), (u'homemaker', 7), (u'engineer', 67)]

>>> x_axisl=numpy.array([c[0] for c in count_by_occupation])

>>> y_axisl=numpy.array([c[1] for c in count_by_occupation])

7.得到各职业所占数量的RDD后,转化两个数组才能用来做条形图,分别对应X和Y轴。collect()函数收集返回的数量并不排序。因此建连个numpy数组,之后调用argsort()函数进行升序,形成新的数组。

>>> x_axis=x_axisl[numpy.argsort(x_axisl)]

>>> y_axis=y_axisl[numpy.argsort(y_axisl)]

8.有了x,y轴线,然后进行图形美化

>>> pos=numpy.arange(len(x_axis))

>>> width=1.0

>>> import matplotlib.pyplot as plt

>>> ax=plt.axes()

>>> ax.set_xticks(pos+(width/2))

>>> ax.set_xticklabels(x_axis)

>>> plt.bar(pos,y_axis,width,color='lightblue')

<Container object of 21 artists>

>>> plt.xticks(rotation=30)

>>> fig=plt.gcf()

>>> fig.set_size_inches(16,10)

>>> plt.show()

Spark的RDD编程(二)公众号undefined110的更多相关文章

  1. [Spark] Spark的RDD编程

    本篇博客中的操作都在 ./bin/pyspark 中执行. RDD,即弹性分布式数据集(Resilient Distributed Dataset),是Spark对数据的核心抽象.RDD是分布式元素的 ...

  2. 大数据学习之hadoop伪分布式集群安装(一)公众号undefined110

    hadoop的基本概念: Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Hadoo ...

  3. 【微信SEO】公众号也能做排名?

    [写于2016年8月] 最近,微信团队发出一则公告,开放公众号运营者一年内更改公众号名一次,这对不少名字起的奇葩名字(包括dkplus)的公众号来说是一件好事. 为什么说是好事呢?公众号名字直接关联到 ...

  4. 微信公众号授权登录后报redirect_uri参数错误的问题

      在进行微信公众号二次开发的时候,需要通过授权码模式来进行微信授权.比如,在进行登录的时候,用户点击了登录按钮,然后弹出一个授权框,用户点击同意后,就可以获取用户的OpenId等信息了.这篇文章主要 ...

  5. 【spark 深入学习 06】RDD编程之旅基础篇02-Spaek shell

    --------------------- 本节内容: · Spark转换 RDD操作实例 · Spark行动 RDD操作实例 · 参考资料 --------------------- 关于学习编程方 ...

  6. spark实验(四)--RDD编程(1)

    一.实验目的 (1)熟悉 Spark 的 RDD 基本操作及键值对操作: (2)熟悉使用 RDD 编程解决实际具体问题的方法. 二.实验平台 操作系统:centos6.4 Spark 版本:1.5.0 ...

  7. Spark RDD编程-大数据课设

    目录 一.实验目的 二.实验平台 三.实验内容.要求 1.pyspark交互式编程 2.编写独立应用程序实现数据去重 3.编写独立应用程序实现求平均值问题 四.实验过程 (一)pyspark交互式编程 ...

  8. 用java开发微信公众号:公众号接入和access_token管理(二)

    本文为原创,原始地址为http://www.cnblogs.com/fengzheng/p/5027630.html 上一篇说了微信开发的准备工作,准备工作完成之后,就要开始步入正题了.其实微信公众号 ...

  9. C#微信公众号开发系列教程二(新手接入指南)

    http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...

随机推荐

  1. UVaLive6039 Uva1668 Let's Go Green

    一开始考虑所有边都是单独的一条路径 然后尽量多的合并 #include<cstdio> #include<cstring> #include<cstdlib> #i ...

  2. request和response的中文乱码问题

    request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码:   ...

  3. hdu2128之BFS

    Tempter of the Bone II Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 98304/32768 K (Java/ ...

  4. hdu 4742 Pinball Game 3D 分治+树状数组

    离散化x然后用树状数组解决,排序y然后分治解决,z在分治的时候排序解决. 具体:先对y排序,solve(l,r)分成solve(l,mid),solve(mid+1,r), 然后因为是按照y排序,所以 ...

  5. 娓娓道来c指针 (3)指针和数组

    (3)指针和数组 在c中指针和数组似乎有着千丝万缕的关系.事实上它们不是一回事:指针是指针,数组是数组.两者不同样. 说它们有关系,只是是由于常见这种代码: int main() { int arra ...

  6. iOS IAP教程

    1. 创建应用 首先进入iTunes Connect然后按下 Manage Your Applications 接下来按下Add New Applicationbutton创建应用 2. 在应用中创建 ...

  7. VMware安装CentOS后网络设置

    在使用CentOS虚拟机后,出现了无法上网的情况,使用主机ping虚机地址可以ping通,而虚机ping不通主机,同时虚机也无法ping通其他的网址或ip,显示内容为Network is unreac ...

  8. Android微信智能心跳方案

    前言:在13年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援.刚到广州的时候,Ray让我和春哥对Line和WhatsApp的心跳机制进行分析.我和春哥抓包测试了差不多两个多礼拜 ...

  9. 使用PowerShell读、写、删除注册表键值

    访问注册表键值 在PowerShell中,用户可以通过类似于HKCU:(作为HKEY_CURRENT_USER)和HKLM:(代表HKEY_LOCAL_MATCHINE)的虚拟驱动器访问注册表键值. ...

  10. python下载IGS观测数据

    最近在学习GPS数据软件处理,经常需要下载数据练习,反复去网站上很麻烦,于是就写了一个小小的爬虫,用的是韩国的服务器,使用了python中的ftplib库实现的 今天稍微改了一下代码,可以选择卫星系统 ...