在本书深入研究复杂的数据分析方法之前,先来关注一些基本的数据探索任务,这些任务几乎会占据数据科学家80%~90%的工作时间。据估计,每年仅仅是数据准备、清洗、转换和数据聚合就有440亿美元的产值(data preparation in the big data era by federico castanedo; best practices for data integration, o?reilly media, 2015)。即便如此,人们最近才开始把更多的时间花费在如何科学地开发最佳实践,以及为整个数据准备过程建立文档、教学材料的良好习惯上,这是一件令人惊讶的事情(beautiful data: the stories behind elegant data solutions, edited by toby segaran and jeff hammerbacher, o?reilly media, 2009;advanced analytics with spark: patterns for learning from data at scale by sandy ryza et al., o?reilly media, 2015)。
很少有数据科学家会对数据分析的具体工具和技术看法一致,因为有多种方式可进行数据分析,从unix命令行到使用非常流行的开源包,或商业的etl和可视化工具等。本章重点介绍在笔记本电脑上如何通过scala进行函数式编程。后面的章节会讨论如何利用这些技术在分布式框架hadoop/spark下进行数据分析。
那函数式编程有什么用呢?spark用scala开发是有原因的。函数式编程的很多基本原则(比如惰性求值、不变性、无副作用、列表推导式和单子(monad)),在分布式环境下做数据处理都表现得很好,特别是在大数据集上做数据准备和转换等任务时更是如此。也可在pc或笔记本上使用这些技术。通过笔记本电脑连接到分布式存储/处理集群就可处理多达数十tb的超级数据集。可以一次只涉及一个主题或关注一个领域,但通常进行数据采样或过滤时,不必考虑分区是否合适。本书使用scala作为基本工具,必要时也会采用其他工具。
从某种意义上讲,scala能实现其他语言所能实现的一切功能。scala从根本上讲是一种高级语言,甚至可称其为脚本语言。scala有自己的容器,并且实现了一些基本的算法,这些功能已经通过大量的应用程序(比如java或c++)和时间的测试,程序员不必关心数据结构和算法实现的底层细节。本章也只会关注如何用scala/spark来实现高级任务。
本章会涉及如下主题:
安装scala
学习简单的数据挖掘技术
学习如何下采样(downsample)原始数据集来提高效率
探讨在scala上实现基本的数据转换和聚合
熟悉大数据处理工具,比如spark和spark notebook
通过编程实现对数据集的简单可视化