08_spark_core_数据读存_text文件
Sequence文件
SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File)。在SparkContext中,可以调用sequenceFilekeyClass, valueClass。
1)代码实现
package com.atguigu.readAndSave
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**
* @author dxy
* @date 2021/2/25 13:19
*/
object Operate_Sequence {
def main(args: Array[String]): Unit = {
//TODO 1.创建SparkConf并设置App名称
val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")
//TODO 2.创建SparkContext,该对象是提交Spark App的入口
val sc: SparkContext = new SparkContext(conf)
val strRDD: RDD[String] = sc.makeRDD(List("atguigu","zoo","hive","banana","spark","hadoop"))
//seq文件的存储
//strRDD.map((_,1)).coalesce(1).saveAsSequenceFile("D:\\DevelopmentTools\\spark\\SparkCoreTest1109\\seqout")
//seq文件的读取
val seqRDD: RDD[(String, Int)] = sc.sequenceFile("D:\\DevelopmentTools\\spark\\SparkCoreTest1109\\seqout")
seqRDD.collect().foreach(println)
//TODO 3.关闭连接
sc.stop()
}
}
运行结果
(atguigu,1)
(zoo,1)
(hive,1)
(banana,1)
(spark,1)
(hadoop,1)
总结
1.saveAsSequence行动算子在使用时存储K-V形式文件
2.Sequence文件读取可以使用上下文对象sc.sequenceFile[keyClass, valueClass](path)。
因此在读文件时,你要清楚你的文件K和V具体是什么类型(即当初你存储文件的时候文件K和V泛型是什么)
另外对于文件读取要灵活处理,比如:保存文件,文件内容较少可以保存在一个文件中,可以灵活使用coalesce()算子,先改分区个数
即:rdd.coalesce(1)