Activity 4.1: Stream Processing of Big Data
本页目录· 15 条
使用 Shell 命令操作大文件
在本部分应用课程中,我们将研究 Unix Shell 中一些简单的命令行工具,它们允许我们操作大型数据文件,而无需将其全部加载到内存中。
启动 Shell
- Windows 电脑:如果你想在自己的 Windows 机器上完成实验,可以安装 Cygwin,它允许你在 Windows 中运行类 Unix 的 Shell。
- Linux 电脑:点击屏幕左上角的黑色方块以打开终端。
- MacOSX 电脑:前往 Applications → Utilities → Terminal。
启动 Shell 后,你需要下载实验材料中的 “Zipped directory of files” 数据。
注意:如果你使用的是实验室里的 Linux 学生镜像,则需要在该 Linux 系统下运行浏览器才能访问 Moodle 页面。
运行 Shell
进入 Unix Shell 后,输入以下命令来熟悉基本操作:
练习 1:以上命令各自的作用是什么?
然后从 Moodle 下载 tutorial_data.zip 文件,并在终端中导航到该文件所在的目录。
例如:
- 如果你是 Windows 用户,文件在 Downloads 文件夹中,可以使用:
- 如果你是 Mac 用户,可以使用:
解压 zip 文件以查看内容(Mac 系统会自动解压,无需手动解压):
然后切换目录到 books 文件夹:
接下来我们使用 less,这是一个简单的程序,用于查看(但不能编辑)文本文件:
这是哪本书? 你可以用以下命令在文件中导航:
- [↑/↓] :上下移动一行
- [space] :向下翻一页
- q :退出
如果在使用 less 时遇到问题,可以按 [Control]+c 退出程序。
less 的一些其他有用命令:
- [shift]+g :跳到文件末尾
/关键字:搜索文件中第一次出现的关键字/:继续查找下一个关键字
练习 2
爱丽丝在哪一章去了 “疯帽子的茶会 (Mad Tea-Party)”?
我们可以使用 grep 命令快速查找书的章节标题:
练习 3
查看文件夹中的其他书。它们的作者是谁?
第二条命令中的星号 "*" 是通配符,可以匹配所有从 book1.txt 到 book10.txt 的文件,相当于依次对每个文件执行 grep。
练习 4
尝试仅显示第 1 到 5 本书的作者。(提示:使用括号式通配符)
练习 5
第三本书非常长,它是托尔斯泰的《战争与和平》。
使用 wc 命令统计它的长度:
该命令会返回三个数字。你能解释它们的含义吗?(提示:Google 搜索“wc unix”)
再写一条命令,列出所有书的字数统计。
管道与大文件处理
cat 命令会将文件内容输出到终端,例如:
更有用的是将 cat 与管道符 | 结合使用:
这样,程序 1 的输出就会成为程序 2 的输入。
为什么管道对大数据处理有用?
因为它允许我们以流(stream)的形式处理数据,而不是一次性将整个文件加载到内存中。
操作压缩大文件
进入 data 文件夹:
你会看到一个 12MB 的压缩文件:hourly_44201_2014-06.csv.gz。
不要解压它,我们直接在管道中解压:
加载速度非常快,因为只显示文件开头部分,而不是整个文件。
如果想统计行数,可以这样:
练习 6:为什么统计行数的命令比 less 要慢得多?
less→ 部分解压 + 局部显示,只解压很少数据。wc→ 完整解压 + 全量统计,必须遍历整个文件。
查看文件头尾
例如只取前 1000 行并保存到文件:
练习 7
既然你已经熟悉了管道,为什么它对大数据处理很有用?
使用 awk 处理数据
awk 可以逐行处理文本文件:
F','指定分隔符为逗号{print $6,$7,$14}打印第 6、7 和 14 列
例如:只输出第 1001–1500 行并保存:
随机抽样 1% 行:
筛选洛杉矶地区数据:
排序
提取第 14 列并排序:
排序会很慢,因为必须读取整个文件。(确实)
更大文件:风力数据
文件:hourly_WIND_2015.zip(87MB 压缩,2.5GB 解压后)。
使用 -p 直接解压到管道:
统计行数:
提取加州的数据:
保存完成后,在 R Studio 中加载并查看:
挑战
从原始文件中提取 风速大于 20 节的记录的经纬度,保存到新文件,再在 R Studio 中加载,绘制经纬度散点图,查看极端风速的分布位置。
RStudio