1、RDD是个什么东西?
现在也不能非常好的解释,但是这又是一个必须用到的基础概念,所以自己做一个浅显粗陋的理解。就当其是一个数据存储类型,就跟Python里有dataframe一样,不过它所存储的数据会在集群里多台机器上存储,而不是像之前的Python里的dataframe一样是存储在一台机器上。
2、REPL
粗浅理解,就是交互式编程,跟Python的jupyter notebook一样,写一段代码,回车可以有结果展现,很适合前期数据简单查看。
3、做一个RDD过程实例(也有别的方式,有些过程自己搞的复杂,为了熟悉一些命令的用法)
3.1数据准备
(1)进入到准备放置文件的文件夹,利用如下命令新建一个文件及加入一行数据
echo a,b,c,d > aa.csv
(2)还可以继续追加
echo 1,2,3,4>>aa.csv
(3)也可以直接进入文件编辑
vim aa.csv
(4)最终我在里面加入了3行数据
a,b,c,d
1,2,3,4
4,5,6,7
(5)把文件上传到hdfs上
hadoop fs -put /ETL/linkage/aa.csv /input/aa.csv
3.2创建RDD
val aa=sc.textFile(“/input/aa.csv)
a,b,c,d
1,2,3,4
4,5,6,7
3.3RDD数据探查
(1)查看一行数据
aa.first
结果:a,b,c,d
(2)查看多行数据
aa.take(2)
结果:a,b,c,d
1,2,3,4
(3)查看所有数据
val aal=aa.collect()
结果:a,b,c,d
1,2,3,4
4,5,6,7
(4)按行打印
aal.foreach(println)
结果:a,b,c,d
1,2,3,4
4,5,6,7
(5)初步定义个函数
def isHeader(line:String)=line.contains(“a”)
(6)函数调用
aal.filter(isHeader).foreach(println)
结果:a,b,c,d
以上这步操作实现了过滤csv文件的标题,如果取反想得到csv文件的数据,则可以有下方三种表达方式:
aal.filter(x => !isHeader(x)).length
或者:
aal.filter(!isHeader(_)).length
或者:
aal.filterNot(isHeader).length
结果:
2
我考虑下次文章记录还是加一点图片吧,这样更好阅读一些。