《Spark大数据分析:核心概念、技术及实践》一1.2 数据序列化

简介:
  本节书摘来自华章出版社《Spark大数据分析:核心概念、技术及实践》一书中的第1章,第1.2节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问云栖社区“华章计算机”公众号查看。


1.2 数据序列化

数据有自己的生命周期,独立于创建或使用它的程序。大多数情况下,数据比创建它的应用存活得更久。一般来说,数据保存在硬盘上。有时,也会通过网络把数据从一个应用发送给另一个应用。

在硬盘上存储或通过网络发送的数据格式与数据在内存中的格式是不一样的。把内存中的数据转换为可在硬盘上存储或通过网络发送的过程叫作序列化,而把硬盘或网络中的数据读取到内存的过程叫作反序列化。

数据可以用多种不同的格式进行序列化,比如CSV、XML、JSON和各种二进制格式。每种格式各有优缺点。比如,像CSV、XML和JSON这样的文本格式对人类友好,但在存储空间或解析时间方面并不十分高效。另一方面,二进制格式更加紧凑,在解析上比文本格式更快,但可读性较差。

在数据集较小时,文本和二进制格式之间的序列化/反序列化时间和存储空间差异不是什么大问题。因此,人们通常首选文本格式来处理小数据集,因为它更容易管理。然而,对于大数据集,文本和二进制格式之间的序列化/反序列化时间和存储空间差异将是极大的。因此,首选二进制格式来存储大数据集。

本节讲述一些常用的用来序列化大数据的二进制格式。

1.2.1 Avro

Avro提供了一个简洁的且独立于语言的二进制格式,用来数据序列化。它可用来存储数据到文件或通过网络发送数据。它支持多种数据结构,包括嵌套数据。

Avro使用一种自描述的二进制格式。使用Avro序列化数据时,模式与数据同时存储。这样一来,稍后Avro文件可以被任何应用读取。另外,因为模式与数据同时存储,所以写数据时没有关于值的间接开销,使得序列化快速、紧实。使用Avro通过网络交换数据时,发送端和接收端在初始化连接握手时交换模式。Avro模式使用JSON描述。

Avro自动处理字段的添加和删除、前向和后向兼容性,这些都不需应用来负责。

1.2.2 Thrift

Thrift是一个独立于语言的数据序列化框架,主要提供工具来完成不同编程语言所写的应用之间通过网络进行的数据交换序列化。它支持多种语言,包括:C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk、OCaml、Delphi和其他语言。

Thrift提供一个代码生成工具和一组用于序列化数据并通过网络传输的库。它抽象了序列化数据和通过网络传输数据的机制。因此,它使得应用开发者可以集中精力于核心的应用逻辑,而不用担心如何序列化数据和可靠、有效地传输数据。

通过Thrift,应用开发者在一个语言中立的接口定义文件中定义数据类型和服务接口。在接口定义文件中定义的服务由服务器端应用提供,并由客户端应用使用。Thrift编译器编译这个文件,并生成开发者用来快速构建客户端和服务器端应用的代码。

基于Thrift的服务器和客户端可以在相同计算机或网络上的不同计算机上运行。同样地,服务器端和客户端应用可以使用同一种编程语言来开发,也可以用不同编程语言来开发。

1.2.3 Protocol Buffers

Protocol Buffers是Google开发的开源数据序列化框架。类似于Thrift和Avro,它也是语言中立的。Google内部用Protocol Buffers作为主要的文件格式,也将其用来进行应用间的数据交换。

Protocol Buffers与Thrift类似,前者提供一个编译器和一组库来帮助开发者序列化数据。开发者在一个文件中定义数据集的结构或模式,然后用Protocol Buffers编译器进行编译,由此生成可用来轻松读写数据的代码。

相对Thrift而言,Protocol Buffers支持较少的编程语言。目前,它支持C++、Java和Python。另外,不像Thrift那样同时提供数据序列化和构建远程服务的工具,Protocol Buffers主要是一种数据序列化格式,可以用来定义远程服务,但并未限定到任何RPC(远程过程调用)协议。

1.2.4 SequenceFile

SequenceFile是一种用于存储键值对的二进制文件格式。它通常作为Hadoop的输入和输出文件格式。MapReduce也用SequenceFile来存储map函数返回的临时输出。

SequenceFile有三种不同的格式:未压缩格式、记录压缩格式和块压缩格式。在记录压缩格式的SequenceFile中,只有记录中的值才压缩;而在块压缩格式的SequenceFile中,键和值都压缩。

相关文章
|
23天前
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
123 71
|
2天前
|
SQL 数据可视化 大数据
从数据小白到大数据达人:一步步成为数据分析专家
从数据小白到大数据达人:一步步成为数据分析专家
126 92
|
22天前
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
129 73
|
4月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
56 1
|
19天前
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
64 22
|
2月前
|
存储 机器学习/深度学习 数据可视化
数据集中存在大量的重复值,会对后续的数据分析和处理产生什么影响?
数据集中存在大量重复值可能会对后续的数据分析和处理产生多方面的负面影响
159 56
|
24天前
|
数据采集 数据可视化 索引
Pandas数据应用:股票数据分析
本文介绍了如何使用Pandas库进行股票数据分析。首先,通过pip安装并导入Pandas库。接着,从本地CSV文件读取股票数据,并解决常见的解析错误。然后,利用head()、info()等函数查看数据基本信息,进行数据清洗,处理缺失值和重复数据。再者,结合Matplotlib和Seaborn进行数据可视化,绘制收盘价折线图。最后,进行时间序列分析,设置日期索引、重采样和计算移动平均线。通过这些步骤,帮助读者掌握Pandas在股票数据分析中的应用。
59 5
|
1月前
|
数据采集 监控 数据挖掘
常用电商商品数据API接口(item get)概述,数据分析以及上货
电商商品数据API接口(item get)是电商平台上用于提供商品详细信息的接口。这些接口允许开发者或系统以编程方式获取商品的详细信息,包括但不限于商品的标题、价格、库存、图片、销量、规格参数、用户评价等。这些信息对于电商业务来说至关重要,是商品数据分析、价格监控、上货策略制定等工作的基础。
|
2月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
2月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
159 2