Spark学习(一)基础数据预处理
来源:互联网 发布:java支付宝开发流程 编辑:程序博客网 时间:2024/05/15 00:50
本文写在进行spark学习的过程中,学习过程主要参考
http://blog.csdn.net/u013719780/article/details/51768720
1、导包
from pyspark import SparkContext
2、提交脚本
spark-submit pythonapp.py
3、导入数据
user_data = sc.textFile('/路径/ml-100k/u.user')
4、查看某数据集的某一条数据
movie_data.first()
tip1:把map()理解为要对每一行做这个事情,对每个元素做动作
tip2:lambda x:f(x) x就是那个object,f(x)是要对object做的事
tip3:count() 可以看成对整个大局的操作
各类算子
1、map():对每行,用map()中的函数作用
2、filter():对每一个元素,括号里给出筛选条件,进行过滤
1、count():计数、加和
2、distinct():取所有不同的元素,类似于做set()操作,去重
3、collect():把分散的内容整理成一个数组,例如,形成一个由每行中的“年龄”组成的数组
典型问题分析
1、统计某一职业的人数
count_by_occupation = user_fields.map(lambda fields: (fields[3],1)).reduceByKey(lambda x,y:x+y).collect()
分析:典型问题,统计某一属性的个数
1、首先,将属性作为key,将1作为值
2、根据Key进行Reduce,在Reduce中,写入需要进行Reduce的操作。这个操作可以看成将一个大局问题拆成两两的问题。两两是怎样一个问题。
3、最后的collect是为了将一个分散的统计变成一个数组
4、它有一个简化版本
count_by_occupation2 = user_fields.map(lambda fields: fields[3]).countByValue()
其他
1、格式化
print "Users: %d, genders: %d, occupations: %d, ZIP codes: %d"%(num_users,num_genders,num_occupations,num_zipcodes)
2、操作之前先把它变成字段
movie_fields = movie_data.map(lambda lines:lines.split('|'))
3、map可以这样链式级联
years = movie_fields.map(lambda fields: fields[2]).map(lambda x: convert_year(x))
4、得到object的key和value
values = movie_ages.values()bins = movie_ages.keys()
5、对map后取出来的字段做统计操作
ratings.stats()
6、计算每个用户的评价次数
user_ratings_grouped = rating_data.map(lambda fields:(int(fields[0]),int(fields[2]))).groupByKey()user_rating_byuser = user_ratings_grouped.map(lambda (k,v):(k,len(v)))user_rating_byuser.take(5)
绘制每个用户的总共评价次数的分布图:
user_ratings_byuser_local = user_rating_byuser.map(lambda (k,v):v).collect()
这里如果用countByValue的话不能得到是哪个用户进行了评价的相关信息。
7、对异常值或缺失值的处理
现实中的数据会存在信息不规整、数据点缺失和异常值问题。值缺失和异常也很常见。大致的处理方法如下。
1、 过滤掉或删除非规整或有值缺失的数据:这通常是必须的,但的确会损失这些数据里那些好的信息。
2、 填充非规整或缺失的数据:可以根据其他的数据来填充非规整或缺失的数据。方法包括用零值、全局期望或中值来填充,或是根据相邻或类似的数据点来做插值(通常针对时序数据)等。选择正确的方式并不容易,它会因数据、应用场景和个人经验而不同。
3、 对异常值做鲁棒处理:异常值的主要问题在于即使它们是极值也不一定就是错的。到底是对是错通常很难分辨。异常值可被移除或是填充,但的确存在某些统计技术(如鲁棒回归)可用于处理异常值或是极值。
4、 对可能的异常值进行转换:另一种处理异常值或极值的方法是进行转换。对那些可能存在异常值或值域覆盖过大的特征,利用如对数或高斯核对其转换。这类转换有助于降低变量存在的值跳跃的影响,并将非线性关系变为线性的。
用指定值替换bad values和missing values
years_pre_processed = movie_fields.map(lambda fields: fields[2]).map(lambda x: convert_year(x)).collect()
years_pre_processed_array = np.array(years_pre_processed)mean_year = np.mean(years_pre_processed_array[years_pre_processed_array!=1900])median_year = np.median(years_pre_processed_array[years_pre_processed_array!=1900])index_bad_data = np.where(years_pre_processed_array==1900)years_pre_processed_array[index_bad_data] = median_yearprint 'Mean year of release: %d' % mean_yearprint 'Median year of release: %d ' % median_yearprint "Index of '1900' after assigning median: %s"% np.where(years_pre_processed_array==1900)[0]
阅读全文
4 0
- Spark学习(一)基础数据预处理
- Spark基础学习(一)
- Spark基础学习一
- spark机器学习(Chapter 03)--使用spark-python进行数据预处理和特征提取
- Spark学习(一)基础介绍
- 【sklearn】数据预处理(一)
- Spark 基础(一)
- spark学习之数据预处理和特征提取
- spark mllib 的数据预处理
- spark学习(一)
- <转>Spark MLlib 数据预处理-特征变换(二)
- 机器学习(一):用sklearn进行数据预处理:缺失值处理、数据标准化、归一化
- 数据挖掘技术(一)预处理
- spark学习笔记一:scala语言基础
- Spark Streaming基础学习【一】WordCount
- c++基础学习 - 预处理
- Spark基础入门(一)--------RDD基础
- sklearn学习笔记(一)——数据预处理 sklearn.preprocessing
- 观察者模式
- JAVA图片合成
- 第二周
- poj 2138 Travel Games 搜索+自动机水题
- 多线程---yield
- Spark学习(一)基础数据预处理
- CSS3更多属性 浏览器私有前缀
- 【POJ3071】Football
- Is Derek lying?
- 1703-MySQL-DBCP连接池配置)
- mac系统使用chrome浏览器快捷键总结
- C语言模拟实现atoi函数
- 多线程----sleep
- hdu1075 字典树