《Fast Data Processing with Spark 2(Third Edition)》读书笔记一

本书其它笔记Fast Data Processing with Spark 2(Third Edition)》读书笔记目

Spark概览

Apache Spark is a fast and general-purpose cluster computing system

本文基于目前最新的spark版本2.2.1整理,以Python3.6为例,在Mac单机情况下使用。

安装

部署环境需求

  • Window, Linux, Mac均可
  • Java8+(需要设置JAVA_HOME环境变量)

下面三个根据自己习惯使用的语言选择安装

  • Python2.7+/3.4+
  • R 3.1+
  • 为了使用Scala API, 需要安装完整的Scala 2.11.x版本

pipenv使用指南

pipenvPython官方推荐的包管理工具。可以说,它集成了virtualenv, pippyenv三者的功能。其目的旨在集合了所有的包管理工具的长处,如: npm, yarn, composer等的优点。

它能够自动为项目创建和管理虚拟环境,从Pipfile文件添加或删除安装的包,同时生成Pipfile.lock来锁定安装包的版本和依赖信息,避免构建错误。

pipenv主要解决了如下问题:

  • 不用再单独使用pipvirtualenv, 现在它们合并在一起了
  • 不用再维护requirements.txt, 使用PipfilePipfile.lock来代替
  • 可以使用多个python版本(python2python3)
  • 在安装了pyenv的条件下,可以自动安装需要的Python版本

安装

为了方便使用, 建议全局安装

1
$ pip install pipenv

《利用Python进行数据分析第二版》读书笔记三

数据合并,拼接和变型

分层索引

分层索引是Pandas的一个重要特性,能够让我们在一个轴上拥有多层索引。简单来说,它提供了一个在降纬模式下处理多维数据的能力。

如下是一个多层索引的例子

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
>>> data = pd.Series(np.random.randn(9),
...                  index=[['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'], [1,2,3,1,3,1,2,2,3]])

>>> data
a  1    1.007189
   2   -1.296221
   3    0.274992
b  1    0.228913
   3    1.352917
c  1    0.886429
   2   -2.001637
d  2   -0.371843
   3    1.669025
dtype: float64

>>> data.index
MultiIndex(levels=[['a', 'b', 'c', 'd'], [1, 2, 3]],
           labels=[[0, 0, 0, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 2, 0, 1, 1, 2]])

# 访问外层索引
>>> data['b']
1    0.228913
3    1.352917
dtype: float64

>>> data['b':'c']
b  1    0.228913
   3    1.352917
c  1    0.886429
   2   -2.001637

# 访问内层索引
>>> data.loc[:, 2]
a   -1.296221
c   -2.001637
d   -0.371843
dtype: float64

《利用Python进行数据分析第二版》读书笔记一

Numpy基础

更多关于NumPy的使用, 可以参考NumPy快速入门指南

Numpy数据类型

Numpy DataTypes

np.where

np.where是一个向量版本的三元表达式x if c else y。假如我们有三个数组xarr, yarr, cond。 当cond为真时,取xarr的值,否则取yarr的值。我们可以这样做:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
>>> xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])

>>> yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])

>>> cond = np.array([True, False, True, True, False])

>>> result = [(x if c else y) for x, y, c in zip(xarr, yarr, cond)]

>>> result
[1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5]

10分钟入门Pandas

参考:

10 Minutes to pandas

安装

支持的python版本: 2.7, 3.5, 3.6

1
$ pip install pandas

检查本地的pandas运行环境是否完整,可以运行pandas的单元测试用例

1
$ pip install pytest
1
2
>>> import pandas as pd
>>> pd.test()

获取当前使用pandas的版本信息

1
2
3
>>> import pandas as pd
>>> pd.__version__
'0.21.1'

NumPy快速入门指南

参考: https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

准备

安装numpy

1
$ pip install numpy

基础

In NumPy dimensions are called axes. The number of axes is rank.

Numpy中,维度被称作axes, 维度数被称作rank

Numpy的数组类是ndarray, 与标准python库的数组不太一样,它包含的元素必须是相同类型的。

ndarray的常见属性如下:

  • ndarray.ndim数组的轴数(即rank)
  • ndarray.shape数组的维度,返回的是一个元组,元组的长度值刚好是ndim
  • ndarray.size数组元素的个数
  • ndarray.dtype数组元素的类型
  • ndarray.itemsize数组元素的字节大小
  • ndarray.data数组包含的实际数据(一般情况下不会用到这个属性,都是通过索引来访问元素)

Linux命令行与shell脚本编程大全第二版学习笔记

Linux系统可以划分为4个部分

  • Linux内核
  • GUN工具组件
  • 图形化桌面环境
  • 应用软件

常用命令

ls

  • -F 在目录名后面添加/ ,方便和普通文件区分
  • -R 递归显示当前目录
  • -A 效果与-a一样,只是不输出(.)和(..)

touch

  • -t 修改已有文件的时间戳

cp

  • -b 复制文件时,如果目的地有一份同名文件,就将该文件备份然后再复制,而不是直接覆盖
  • -p 保留拷贝文件的文件属性,如修改时间等
  • -l 与 -s 参数可以使cp命令与ln命令一样,创建链接-l(硬链接),-s(软链接)

rmdir

  • 删除一个空目录