《Scala机器学习》一一1.5 使用Scala和Spark的Notebook工作

简介: 本节书摘来自华章出版社《Scala机器学习》一 书中的第1章,第1.5节,作者:[美] 亚历克斯·科兹洛夫(Alex Kozlov)著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5 使用Scala和Spark的Notebook工作
通常,这五种数字汇总方式不足以对数据形成初步认识。描述性统计(descriptive statistics)的术语非常通用,并且可以采用非常复杂的方法来描述数据。分位数和帕雷托图(Pareto chart)都是描述性统计的例子,当分析一个以上的属性时,相关性也是。在大多数情况下都能查阅到这些数据汇总的方法,但通过具体的计算来理解这些方法也很重要。
Scala或者Spark Notebook(https://github.com/Bridgewater/scala-notebook, https://github. com/andypetrella/spark-notebook)记录了完整的执行过程,并且保存为一个基于JSON的*.snb文件。Spark Notebook项目可以从http://spark-notebook.io?上下载,本书提供了一个例子文件Chapter01.snb。对于Spark的使用,会在第3章中进行更详细的讨论。
Spark可以运行在本地模式下,这是一种特殊情形。即使在本地模式下,Spark也可以在单机上进行分布式计算,不过会受机器的CPU核(或超线程)的数量限制。对配置进行简单修改后,Spark就可在一个分布式集群上运行,并能使用多个分布式节点上的资源。
下面这组命令可用于下载Spark Notebook,并从代码库中复制所需的文件:
image
image

在浏览器地址栏上输入http://localhost:9000来打开Notebook,具体如图1-2所示:
image

图1-2 以列表形式来展示Spark Notebook的首页
通过点击来打开Chapter01 notebook。语句被组织成多个单元,并可通过点击顶部那个向右的小箭头来执行每个单元(其结果如图1-3所示)。也可通过菜单Cell→Run All来一次性运行所有的单元。
首先来观察一下离散的变量。比如得到另一些观察属性。如果像下面的代码影响了标签的分布,就不可能这样做:
image

在MacBook Pro上第一次读入这个数据集可能需要几分钟,但是Spark会把数据缓存在内存中,随后的汇总只需要一秒钟左右。Spark Notebook给出了数据值的分布,如图1-4所示。
通过查看离散变量对的交叉表计数(使用http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.DataFrameStatFunctions)来理解变量之间相互依赖的关系。DataFrameStatFunctions不支持相关度量计算,如卡方等(见图1-5)。
image

图1-3 执行notebook中的前几个单元任务
image

图1-4 计算分类字段的值的分布
image

图1-5 列(contigency)联表(或交叉表)
从这里可以看出:最流行的服务是private,并且和SF 标志相关。分析依赖关系的另一种方法是看为0的项。比如,S2和S3标志明显和SMTP以及FTP流量相关,因为其他项的值都是0。
当然,最有趣的是与目标变量的相关性,但这些都可通过监督学习算法(在第3章和第5章会详细介绍)来更好地得到。
类似地,可以通过dataFrame.stat.corr()和dataFrame.stat.cov()函数计算数值变量的相关性(见图1-6)。该类支持皮尔森相关系数。另外,也可以直接在Parquet文件上使用标准的SQL语句:
image

最后计算百分数。这通常会对整个数据集排序,其代价非常大。但如果要比较的是第一个或最后一个,通常可对计算进行优化:
image

从Spark Notebook的部分示例代码可看出计算更通用的精确百分位数会有更高的代价。
image

图1-6 使用org.apache.spark.sql.DataFrameStatFunctions计算简单的汇总

相关文章
|
2月前
|
分布式计算 大数据 Java
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
59 5
|
2月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
52 3
|
2月前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
44 0
|
2月前
|
消息中间件 存储 分布式计算
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
98 0
|
2月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
31 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
47 0
|
2月前
|
缓存 分布式计算 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
55 0
|
2月前
|
分布式计算 算法 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
56 0
|
6月前
|
分布式计算 资源调度 Java
Scala+Spark+Hadoop+IDEA实现WordCount单词计数,上传并执行任务(简单实例-下)
Scala+Spark+Hadoop+IDEA实现WordCount单词计数,上传并执行任务(简单实例-下)
67 0
|
6月前
|
分布式计算 Hadoop Scala
Scala +Spark+Hadoop+Zookeeper+IDEA实现WordCount单词计数(简单实例-上)
Scala +Spark+Hadoop+Zookeeper+IDEA实现WordCount单词计数(简单实例-上)
55 0