Spark文本文件输入输出

1.文本文件输入输出

textFile 进行文本文件的读取

ps:如果传递目录,则将目录下的所有文件读取作为RDD

saveAsTextFile 进行文本文件的输出

ps:将传入的路径作为目录对待,会在那个 目录下输出多个文件

object DEmo1 extends App{
  val conf = new SparkConf().setAppName("wordcount").setMaster("local")
  val sc = new SparkContext(conf)
  val value: RDD[String] = sc.textFile("D:\\tmp")
  value.saveAsTextFile("out")
}
2.JSON文件输入输出

JSON文件中每一行就是一个JSON记录,那么可以通过将JSON文件当做文本文件来读取,然后利用相关的JSON库对每一条数据进行JSON解析。

{"movie":"1193","rate":"5","datetime":"978300760","uid":"1"}
object Demo3 extends App {
  val conf = new SparkConf().setAppName("test").setMaster("local")
  val sc = new SparkContext(conf)
  val value: RDD[String] = sc.textFile("D:\\git\\\\data\\rating.json")
  val result = value.map((x: String) => {
    import com.alibaba.fastjson.JSON
    import com.alibaba.fastjson.JSONObject
    //利用字符串构建Json对象
    val jsonObject: JSONObject = JSON.parseObject(x)
    //从json对象上爬取相关字段
    val movie: String = jsonObject.getString("movie")
    val rate: String = jsonObject.getString("rate")
    val datetime: String = jsonObject.getString("datetime")
    val uid: String = jsonObject.getString("uid")
    //拼接字符串为一组
    s"$movie,$rate,$datetime,$uid"
  })
  result.foreach(println)
}
3.CSV文件输入输出

读取 CSV 数据和读取 JSON 数据相似,都需要先把文件当作普通文本文件来读取数据,然后通过将每一行进行解析实现对CSV的读取。

4.SequenceFile文件输入输出

SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计

saveAsSequenceFile 存储文件数据

可以直接调用 saveAsSequenceFile(path) 保存你的PairRDD,它会帮你写出数据。需要键和值能够自动转为Writable类型

sequenceFile读取文件是需要指定文件中的数据类型(泛型类型)

object DEmo2 extends App{
  val conf = new SparkConf().setAppName("wordcount").setMaster("local")
  val sc = new SparkContext(conf)
  val data=sc.parallelize(List((2,"aa"),(3,"bb"),(4,"cc")))
  //以SequenceFile形式保存文件
  data.saveAsSequenceFile("out4")
  //读取以以SequenceFile形式保存的文件.需指定泛型
  val sdata=sc.sequenceFile[Int,String]("out4")
 //打印读取的内容到控制台
  println(sdata.collect().toBuffer)
}

总结

Spark的整个生态系统与Hadoop是完全兼容的,所以对于Hadoop所支持的文件类型或者数据库类型,Spark也同样支持.另外,由于Hadoop的API有新旧两个版本,所以Spark为了能够兼容Hadoop所有的版本,也提供了两套创建操作接口.对于外部存储创建操作而言,HadoopRDD和newHadoopRDD是最为抽象的两个函数接口,主要包含以下四个参数.

  1. 输入格式(InputFormat): 制定数据输入的类型,如TextInputFormat等,新旧两个版本所引用的版本分别是org.apache.hadoop.mapred.InputFormat和org.apache.hadoop.mapreduce.InputFormat(NewInputFormat)

  2. 键类型: 指定[K,V]键值对中K的类型

  3. 值类型: 指定[K,V]键值对中V的类型

  4. 分区值: 指定由外部存储生成的RDD的partition数量的最小值,如果没有指定,系统会使用默认值defaultMinSplits

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值