除了从scala集合生成RDD外,我们也可以从文件、其他数据库中读取数据。这里我们遵从spark官方教程,将只介绍从基本的几种文件读取,而比如json文件,数据库等等其他常与spark sql 或 dataFrame 之中添加的读取方式将留在spark sql 和 dataframe 章节再作介绍。
spark支持基本读取方式有 :
text file ,方法 SparkContext.textFile("xx.txt",切片数量参数)
参数可以是文件(/a/xx.txt),目录(/a/directory),压缩文档(/a/a.gz),甚至支持通配符(/a/*.txt),URL格式可以,比如hdfs://, s3n://,etc URI
方法返回结果为文件每一行
如果要读取一个文件夹下的所有小文本文件,可以使用方法 SparkContext.wholeTextFiles,和textFile不同的是,方法返回结果是(filename,content) 这样的格式
PS:文件必须保证worker nodes 能访问,否则节点到哪去给您找文件啊?
spark在1.3之后,即推出dataframe之后,spark sql 库中支持以下几种方式读取数据:
spark 可以使用 RDD.saveAsObjectFile 或者 SparkContext.objectFile ,比如Avro这种序列化,当然效率可能不高。