除了对本地文件系统进行读写以外,Spark还支持很多常见的文件格式(文本文件、JSON)和文件系统(HDFS)和数据库(MySQL、Hive、Hbase)。
1.文件系统的数据读写
1.1本地文件系统的数据读写
在本机上的/usr/local/spark/spark-2.2.0-bin-hadoop2.7/examples/src/main/resources 目录下新建一个TXT文件。文件内容如下:
image.png
要加载本地文件,必须采用“file:///”开头的这种格式。执行上上面这条命令以后,并不会马上显示结果,因为,Spark采用惰性机制,只有遇到“行动”类型的操作,才会从头到尾执行所有操作。
通过SparkContext的textFile方法逐行加载文件中的数据,然后以, 作为分隔符,将每一行的字符串切分为一个只包含两个元素(分别代表name和age)的字符串数组。
#加载本地文件
var file = sc.textFile("file:///usr/local/spark/spark-2.2.0-bin-hadoop2.7/examples/src/main/resources/people.txt")
#取第一行的数据
file.first()
image.png
#将file变量内容保存在另一个文件中
file.saveAsFile("file:///usr/local/spark/spark-2.2.0-bin-hadoop2.7/examples/src/main/resources/user.txt")
1.2分布式文件系统HDFS的数据读写
首先要启动HDFS文件系统
nohup hive --service metastore > metastore.log 2>&1 &
然后进入/usr/local/hadoop/hadoop-2.8.2/bin 创建HDFS文件路径
#user为指定目录,root为登录Linux系统的用户名
#hdfs://master:9000/user/root
hdfs dfs -mkdir -p /user/root
将people.txt 文件上传到HDFS文件系统中(放到root用户下)
#上传文件
hdfs dfs -put /usr/local/spark/spark-2.2.0-bin-hadoop2.7/examples/src/main/resources/people.txt
#查看文件系统中的文件
hdfs dfs -ls .
#查看文件内容
hdfs dfs -cat ./people.txt
image.png
现在,让我们切换回到spark-shell窗口,编写语句从HDFS中加载people.txt文件,并显示