Spark由浅到深(4) -- 数据读取与保存

本文深入探讨Spark的数据读取与保存方法,涵盖多种文件格式如文本、JSON、CSV、SequenceFile,Hadoop输入输出格式,以及本地和HDFS文件系统。还涉及Spark SQL与Apache Hive的集成,以及通过JDBC访问关系型数据库。
摘要由CSDN通过智能技术生成

文本数据读取 → Spark操作 → 处理后数据写入


0. 目的

目前为止,所展示的示例都是从本地集合或者普通文件中进行数据读取和保存的。但有时候,数据量可能大到无法放在一台机器中,这时就需要探索别的数据读取和保存的方法了。

Spark 支持很多种输入输出源

三类常见的数据源:

  • 文件格式与文件系统.
    • 本地文件系统或分布式文件系统(比如 NFS、 HDFS、 Amazon S3 等)中的数据;
    • 文件格式,包括文本文件、 JSON、 SequenceFile,以及 protocol buffer。
  • Spark SQL中的结构化数据源.
  • 数据库与键值存储.

Part 1 文件格式

Spark 对很多种文件格式的读取和保存方式都很简单。

从诸如文本文件的非结构化的文件,到诸如 JSON 格式的半结构化的文件,再到诸如 SequenceFile 这样的结构化的文件,Spark都可以支持.

格式名称 结构化 备注
文本文件 普通的文本文件,每行一条记录
JSON 半结构化 常见的基于文本的格式,半结构化;大多数库都要求每行一条记录
CSV 非常常见的基于文本的格式,通常在电子表格应用中使用
SequenceFiles 一种用于键值对数据的常见 Hadoop 文件格式
Protocol buffers 一种快速、节约空间的跨语言格式
对象文件 用来将 Spark 作业中的数据存储下来以让共享的代码读取。改变类的时候它会失效,因为它依赖于 Java 序列化**
1.1 文件格式
  • 单个文本:
    一个文本文件读取为 RDD 时,输入的每一行都会成为 RDD 的一个元素。

  • 多个文本:
    将多个完整的文本文件一次性读取为一个 pair RDD,其中键是文件名,值是文件内容。

1. 读取文本文件

只需要使用文件路径作为参数调用 SparkContext 中的 textFile() 函数,就可以读取一个文本文件.

如果要控制分区数的话,可以指定 minPartitions。

//  Python 中读取一个文本文件
input = sc.textFile("file:///home/holden/repos/spark/README.md")

如果多个输入文件以一个包含数据所有部分的目录的形式出现,可以用两种方式来处理。

  • 仍使用 textFile 函数,传递目录作为参数,这样它会把各部分都读取到 RDD中;

  • 如果文件足够小,那么可以使用 SparkContext.wholeTextFiles() 方法,该方法会返回一个 pair RDD,其中键是输入文件的文件名。

wholeTextFiles() 在每个文件表示一个特定时间段内的数据时非常有用。如果有表示不同阶段销售数据的文件,则可以很容易地求出每个阶段的平均值.

Spark 支持读取给定目录中的所有文件,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值