数据工程作业四,使用带有spark的docker容器统计文件的词频,排序(使用 Transformation 操作 对文本中的单词排序,按降序打印单词和词频信息)
第一步在Ubuntu中下载docker容器
- 首先,更新软件包索引,并且安装必要的依赖软件,来添加一个新的 HTTPS 软件源:
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
- 使用下面的 curl 导入源仓库的 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
- 允许当前用户获得权限使用docker,其中$USER就是指当前用户
sudo usermod -aG docker $USER
docker container run hello-world
- 若获得如下信息即为成功
拉取(pull)带有spark环境的images
- 这是我们老师的镜像,spark 、jupyter 、python环境都已经配置好了
docker run -it --rm -v ~/test:/home/jovyan/test -p 8888:8888 -p 4040:4040 bigdatateam/all-spark-with-data
- 问题,出现no space left,这里只提供解决思路
- 第一种,查看其他目录的空间是否充足(df -h),如果充足,将docker的root dir改到空间充足的目录下
- 第二种,扩展磁盘,先通过vmware进行扩容
- 然后在Ubuntu下下载一个Gparted,对刚刚扩容的空间进行分配,否则不会生效
- 我是使用的新建一个磁盘,然后将该磁盘挂在到一个空目录下,最后将root dir指向该文件夹
- 磁盘扩容的具体操作,转到另一篇blog
Ubuntu磁盘扩展,挂载
进行实验
github下的spark测试代码网址
#统计行的数量
print("wiki文本有:") print sc.textFile("/data/wiki/en_articles_part/articles-part").count()
print("行")
#统计单词的频率,并打印前十的单词
rdd = sc.textFile("/data/wiki/en_articles_part/articles-part")
#将rdd通过空格划分为单词,并分类
result = rdd.flatMap(lambda x: x.split(' ')).map(lambda x: (x, 1)).reduceByKey(lambda a, b: a + b)
#排序,且降序
sorted_result = result.sortBy(lambda x: x[1], ascending=False)
#打印前十的单词
print(sorted_result.collect()[0:10])
- 如果你使用的是我指定位置的文件和镜像你应该获得如下结果
结束,peace