zoukankan      html  css  js  c++  java
  • Spark的RDD编程(二)

    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()



  • 相关阅读:
    WDF CSS 书写规范
    瞬间之美web界面设计如何让用户心动 读后感(一)
    ubuntu install node0.8.9 to the current user
    js单元测试_jsTestDriver
    window.print
    Java内省
    jQuery源代码学习jQuery对象扩展
    jdk集合结构
    【转载】程序员(1)
    【装载】JAVA虚拟机的内存模型
  • 原文地址:https://www.cnblogs.com/SamllBaby/p/5695543.html
Copyright © 2011-2022 走看看