Learning Spark 学习笔记 第五章 加载或保存数据


大致分为三种数据源:

1.文件和文件系统

本地或者分布式文件系统的文件,可以为text,json,sequenceFile和协议缓存格式的文件数据。

2.结构化数据(Spark SQL)

第九章会详细讲述

3.数据库和键值存储


文件格式:

支持的常见文件格式为:

文本文件:

文本文件在spark中加载和保存很简单,加载一个文本文件为一个RDD时,每一行为RDD中一个item元素。我们也可以多个文件加载为一个RDD,文件名称为key,文件内容为value。加载文件为(scala):val input = sc.textFile("file:///home/holden/repos/spark/README.md"),我们也可以指定最小的分区数minPatitions。参数若为文件夹,则文件夹中的文件均加载到RDD中,也可以用通配符进行(例如,part-*.txt,符合条件的文件均会被加载)。若文件很小,可以使用SparkContext.wholeTextFiles()加载,key为文件名。适用于,若每个文件里的数据代表一定时间的数据。例如每个文件代表一段时间的销售数据,那么很容易计算出这段时间的平均值,如下:

val input = sc.wholeTextFiles("file://home/holden/salesFiles")
val result = input.mapValues{y =>
val nums = y.split(" ").map(x => x.toDouble)
nums.sum / nums.size.toDouble
}

文本文件的保存:result.saveAsTextFile(outputFile)参数为保存路径。不能数据怎么分段保存为文件,但是有其他格式的保存可以。

JSON:

加载json相对于不同的编程语言有不同的方法和库(先把文件作为一个文本文件加载数据,然后再用json解析映射value),scala也有很多种库,这里用jackson:

import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.DeserializationFeature
...
case class Person(name: String, lovesPandas: Boolean) // Must be a top-level class
...
// Parse it into a specific case class. We use flatMap to handle errors
// by returning an empty list (None) if we encounter an issue and a
// list with one element if everything is ok (Some(_)).
val result = input.flatMap(record => {
try {
Some(mapper.readValue(record, classOf[Person]))
} catch {
case e: Exception => None
}})

json数据保存:加载库把string转为json数据,保存时用同样的库把json数据string化。例如:result.filter(p =>P.lovesPandas).map(mapper.writeValueAsString(_)).saveAsTextFile(outputFile) 过滤出喜欢padas的people然后转为string,接着用文本文件的方法保存。

CSV文件:

类似于json的加载方式,先文本文件方式加载,然后库进行解析(很多库,这里scala用opencsv)。如下:

import Java.io.StringReader
import au.com.bytecode.opencsv.CSVReader
...
val input = sc.textFile(inputFile)
val result = input.map{ line =>
val reader = new CSVReader(new StringReader(line));
reader.readNext();
}


本章节都是关于这种数据的加载和保存,而且分类清晰,用到的时候查阅相关章节就可以了,不翻译了这里。接下来还有文件系统 SQL 数据库相关的加载和保存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hjbbjh0521

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值