Spark高级数据分析-第2章 用Scala和Spark进行数据分析
2.4 小试牛刀:Spark shell和SparkContext
本章使用的资料来自加州大学欧文分校机器学习资料库(UC Irvine Machine Learning Repository),这个资料库为研究和教学提供了大量非常好的数据源,
这些数据源非常有意义,并且是免费的。由于网络原因,无法从原始地址下载数据集,这里可以从以下链接获取:
https://pan.baidu.com/s/1dENp41V
或 http://pan.baidu.com/s/1c29fBVy
获取数据集以后,可以使用FileZilla等FTP工具上传到Hadoop集群(作者实验环境是VMware下的Hadoop集群),然后解压缩:
$ unzip donation.zip
$ unzip 'block_*.zip' 在 Hadoop 集群的 HDFS 上为块数据创建一个目录,然后将数据集文件
复制到 HDFS 上:
$ hadoop fs -mkdir linkage
$ hadoop fs -put block_*.csv linkage (说明:当前目录为存放block_*.csv文件的目录) 作者的 Hadoop 集群(Hadoop 2.7.2 + Spark 2.1.0 + Scala 2.12.1)支持 YARN,通过为 Spark master 设定
yarn-client 参数值,就可以在集群上启动 Spark 作业:
$ spark-shell --master yarn --deploy-mode client 创建RDD:
scala> var varblocks = sc.textFile("hdfs:///linkage")
varblocks: org.apache.spark.rdd.RDD[String] = hdfs:///linkage MapPartitionsRDD[1] at textFile at <console>:24
2.5 把数据从集群上获取到客户端
使用 RDD 的 first 方法,该方法向客户端返回 RDD 的第一个元素:
scala> rawblocks.first
res15: String = "id_1","id_2","cmp_fname_c1","cmp_fname_c2","cmp_lname_c1","cmp_lname_c2","cmp_sex","cmp_bd","cmp_bm","cmp_by","cmp_plz","is_match
如果知道 RDD 只包含少量记录,可以用 collect 方法向客户返回一个包含所有 RDD 内容的数组的数组。由于不知道当前数据集有多大,所以就不尝试了。
还可以用 take 方法,这个方法在 first 和 collect 之间做了一些折衷,可以向客户端返回
一个包含指定数量记录的数组。使用 take 方法获取记录关联数据集的前 10 行记录:
scala> val head = rawblocks.take(10)
head: Array[String] = Array("id_1","id_2","cmp_fname_c1","cmp_fname_c2","cmp_lname_c1","cmp_lname_c2","cmp_sex","cmp_bd","cmp_bm","cmp_by","cmp_plz","is_match", 37291,53113,0.833333333333333,?,1,?,1,1,1,1,0,TRUE, 39086,47614,1,?,1,?,1,1,1,1,1,TRUE, 70031,70237,1,?,1,?,1,1,1,1,1,TRUE, 84795,97439,1,?,1,?,1,1,1,1,1,TRUE, 36950,42116,1,?,1,1,1,1,1,1,1,TRUE, 42413,48491,1,?,1,?,1,1,1,1,1,TRUE, 25965,64753,1,?,1,?,1,1,1,1,1,TRUE, 49451,90407,1,?,1,?,1,1,1,1,0,TRUE, 39932,40902,1,?,1,?,1,1,1,1,1,TRUE)
为了更容易读懂数组的内容,我们可以用 foreach 方法并结合 println 来打印
出数组中的每个值,并且每一行打印一个值:
scala> head.foreach(println)
"id_1","id_2","cmp_fname_c1","cmp_fname_c2","cmp_lname_c1","cmp_lname_c2","cmp_sex","cmp_bd","cmp_bm","cmp_by","cmp_plz","is_match"
37291,53113,0.833333333333333,?,1,?,1,1,1,1,0,TRUE
39086,47614,1,?,1,?,1,1,1,1,1,TRUE
70031,70237,1,?,1,?,1,1,1,1,1,TRUE
84795,97439,1,?,1,?,1,1,1,1,1,TRUE
36950,42116,1,?,1,1,1,1,1,1,1,TRUE
42413,48491,1,?,1,?,1,1,1,1,1,TRUE
25965,64753,1,?,1,?,1,1,1,1,1,TRUE
49451,90407,1,?,1,?,1,1,1,1,0,TRUE
39932,40902,1,?,1,?,1,1,1,1,1,TRUE
CSV文件有一个标题行需要过滤掉, 以免影响后续分析。我们可以将标题行中出现的 "id_1" 字
符串作为过滤条件, 编写一个简单的 Scala 函数来测试一行记录中是否包含该字符串,代码如下:
def isHeader(line: String) = line.contains("id_1")
isHeader: (line: String)Boolean
我们其实想要的是所有非标题行。为了完成这个目标,Scala 可以提供 2 种方法。第一种时利用 Array 类的 filterNot 方法:
scala> head.filterNot(isHeader).length
res17: Int = 9
还可以利用 Scala 对匿名函数的支持,在 filter 函数里面对 isHeader 函数取非:
scala> head.filter(x => !isHeader(x)).length
res18: Int = 9
2.6 把代码从客户端发送到集群
用于过滤集群上整个数据集的语法和过滤本地机器上的 head 数组的语法一模一样。
scala> val noheader = rawblocks.filter(x => !isHeader(x))
noheader: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[45] at filter at <console>:29
Spark高级数据分析-第2章 用Scala和Spark进行数据分析的更多相关文章
- [Spark性能调优] 第二章:彻底解密Spark的HashShuffle
本課主題 Shuffle 是分布式系统的天敌 Spark HashShuffle介绍 Spark Consolidated HashShuffle介绍 Shuffle 是如何成为 Spark 性能杀手 ...
- Spark简单介绍,Windows下安装Scala+Hadoop+Spark运行环境,集成到IDEA中
一.前言 近几年大数据是异常的火爆,今天小编以java开发的身份来会会大数据,提高一下自己的层面! 大数据技术也是有很多: Hadoop Spark Flink 小编也只知道这些了,由于Hadoop, ...
- 2-Spark高级数据分析-第二章 用Scala和Spark进行数据分析
数据清洗时数据科学项目的第一步,往往也是最重要的一步. 本章主要做数据统计(总数.最大值.最小值.平均值.标准偏差)和判断记录匹配程度. Spark编程模型 编写Spark程序通常包括一系列相关步骤: ...
- Spark 实践——用 Scala 和 Spark 进行数据分析
本文基于<Spark 高级数据分析>第2章 用Scala和Spark进行数据分析. 完整代码见 https://github.com/libaoquan95/aasPractice/tre ...
- Spark高级数据分析——纽约出租车轨迹的空间和时间数据分析
Spark高级数据分析--纽约出租车轨迹的空间和时间数据分析 一.地理空间分析: 二.pom.xml 原文地址:https://www.jianshu.com/p/eb6f3e0c09b5 作者:II ...
- 4-Spark高级数据分析-第四章 用决策树算法预测森林植被
预测是非常困难的,更别提预测未来. 4.1 回归简介 随着现代机器学习和数据科学的出现,我们依旧把从“某些值”预测“另外某个值”的思想称为回归.回归是预测一个数值型数量,比如大小.收入和温度,而分类则 ...
- Spark架构与作业执行流程简介(scala版)
在讲spark之前,不得不详细介绍一下RDD(Resilient Distributed Dataset),打开RDD的源码,一开始的介绍如此: 字面意思就是弹性分布式数据集,是spark中最基本的数 ...
- 使用scala开发spark入门总结
使用scala开发spark入门总结 一.spark简单介绍 关于spark的介绍网上有很多,可以自行百度和google,这里只做简单介绍.推荐简单介绍连接:http://blog.jobbole.c ...
- idea中使用scala运行spark出现Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class
idea中使用scala运行spark出现: Exception in thread "main" java.lang.NoClassDefFoundError: scala/co ...
随机推荐
- js中propertyIsEnumerable()方法使用介绍
javascript的propertyIsEnumerable()方法使用介绍 概述 propertyIsEnumerable()用来检测属性是否属于某个对象的,如果检测到了,返回true,否则fal ...
- 【web 回车】web项目 注册或登录页面 回车登录无效,解决方案
解决方案: /** * 登陆按钮的点击事件 */ $("#loginID").click(function(){ var username = $("#u"). ...
- matplotlib绘制常用统计图
常见统计图:单条折线图.多条折线图.直方图.柱状图.饼状图 #!/usr/bin/python # -*- coding: utf-8 -*- import numpy as np import ma ...
- 教你用 google-drive-ocamlfuse 在 Linux 上挂载 Google Drive
如果你在找一个方便的方式在 Linux 机器上挂载你的 Google Drive 文件夹, Jack Wallen 将教你怎么使用 google-drive-ocamlfuse 来挂载 Google ...
- tee -a /var/log/jd.log
原文: http://man.linuxde.net/tee --------------------------------------------------------------------- ...
- vi 新建编辑文件时报错 E212 can’t open file for writing
在vi修改防火墙配置时,不能够保存,报E212 can’t open file for writing错误. 网上大概给出了两种答案. 一是权限不够,可以用root权限事实,或者sudo 操作. 二是 ...
- Win7无法安装Flash Player怎么办
在IE的工具选项中把安全选项中的ActiveX控件一系列都改为启用即可.
- LoadRunner录制: 选择协议
LR录制的时候关心的是通信,关心的是客户端和服务器之间的数据包.它通过监控客户端和服务器之间的通信,转化为自己的函数. 协议选择错误,可能会导致录制下来的内容为空. 方法一:根据经验来选择协议 Web ...
- Android 内存泄漏分析利器——leakcanary
LeakCanary Android 和 Java 内存泄露检测. “A small leak will sink a great ship.” - Benjamin Franklin 千里之堤, 毁 ...
- ITFriend创业阶段的server环境搭建手冊
创业阶段,进一步实践了Linux环境搭建和维护,以下是一些经常使用软件的搭建步骤和參考资料,仅供自己和诸位參考. 我个人还是比較倾向"一站式Web开发"的.自己想做点事.须要太多的 ...