c#读取json某一节点数据_Spark实战第二版(涵盖Spark3.0)第七章 从文件接入数据(续3)...

本文介绍了大数据环境下传统文件格式的限制,并详细讲解了Avro、ORC和Parquet这三种流行的大数据文件格式,包括它们的特点、优势以及在不同场景下的适用性。文章探讨了为何需要新的文件格式,强调了列存储、压缩和模式的重要性,并给出了在选择文件格式时的建议。
摘要由CSDN通过智能技术生成
关注公众号: 登峰大数据 ,阅读Spark实战第二版(完整中文版),系统学习Spark3.0大数据框架! 如果您觉得作者翻译的内容有帮助,请分享给更多人。您的分享,是作者翻译的动力! 75a034794a0b3a51a4fda151c54f843e.png

在#700实验,你将接入莎士比亚的《罗密欧与朱丽叶》。Gutenberg项目(http://www.gutenberg.org)拥有大量数字格式的书籍和资源。

书中的每一行都将成为dataframe中的一条记录。没有什么特征可以被句子或单词删去。清单7.17显示了将要处理的文件的摘录。

实验 这里是#700实验。您将要学习的示例是net.jgp.books .spark.ch07.lab700_text_ingestion.TextToDataframeApp。你可以从www.gutenberg.org/cache/epub/1777/pg1777.txt下载《罗密欧与朱丽叶》。
#清单7.17 项目Gutenberg版本的罗密欧与朱丽叶的摘要This Etext file is presented by Project Gutenberg, incooperation with World Library, Inc., from their Library of theFuture and Shakespeare CDROMS. Project Gutenberg often releasesEtexts that are NOT placed in the Public Domain!!...ACT I. Scene I.Verona. A public place.Enter Sampson and Gregory (with swords and bucklers) of the houseof Capulet.    Samp. Gregory, on my word, we'll not carry coals.    Greg. No, for then we should be colliers.    Samp. I mean, an we be in choler, we'll draw.    Greg. Ay, while you live, draw your neck out of collar.    Samp. I strike quickly, being moved.    Greg. But thou art not quickly moved to strike.    Samp. A dog of the house of Montague moves me. ...
7.7.1 期望的输出

下面的清单显示了被Spark接入并转换为dataframe之后的Romeo和Juliet的前五行。

+--------------------+| value              |+--------------------+|                    ||This Etext file i...||cooperation with ...||Future and Shakes...||Etexts that are N...|...root   |-- value: string (nullable = true)
7.7.2 代码 下面的清单是将Romeo和Juliet转换为dataframe所需的Java代码。
package net.jgp.books.spark.ch07.lab700_text_ingestion;import org.apache.spark.sql.Dataset;import org.apache.spark.sql.Row;import org.apache.spark.sql.SparkSession;public class TextToDataframeApp {     public static void main(String[] args ) {      TextToDataframeApp app = new TextToDataframeApp();       app .start();    }     private void start() {      SparkSession spark = SparkSession.builder()            .appName( "Text to Dataframe" )            .master( "local" )            .getOrCreate();      Dataset df = spark .read().format( "text" )            .load( "data/romeo-juliet-pg1777.txt" );       df .show(10);       df .printSchema();    } }

与其他格式不同,没有设置text的选项。

7.8 大数据文件格式

大数据带来了自己的一套文件格式。如果您还没有见过Avro、ORC或Parquet文件,那么您肯定会在Spark之旅中看到一个(如果不是全部的话)。在您使用这些文件之前,了解它们是什么是很重要的。

我听到你说:“为什么我需要更多的文件格式?”在这一部分,我回答这个问题。然后讨论这三种较新的格式。在7.9节中,我将向您展示如何以这些较新的格式接入数据。

7.8.1传统文件格式的问题

在大数据环境中,text、CSV、JSON和XML等传统文件格式有一些您应该知道的限制。

在大多数大数据项目中,您将不得不从某个地方(源)提取数据,并可能不得不将其放回其他地方(目的地)。图7.7描述了这个过程。

源可以是文件(在本章中研究)、数据库(第8章)、复杂系统或api(第9章),甚至是流(第10章)。即使您可以以比文件更有效的方式访问所有这些资源,但由于某些奇怪的原因,您仍然必须处理文件及其恼人的生命周期。

为什么我不能使用JSON、XML或CSV呢?以下是一些原因:

  • JSON和XML(以及某种程度上的CSV)不容易分割。当您希望您的节点读取文件的一部分时,如果可以分割它,则会更容易。节点1将读取前5000条记录,节点2将读取后5000条记录,依此类推。由于它的根元素,XML将需要修改,这可能会破坏文档。大数据文件需要是可拆分的。
  • CSV不能像JSON或XML那样存储层次信息。
  • 没有一个设计成包含元数据。
  • 这些格式都不支持简单的列添加、删除或插入(尽管您可能不需要这些操作,因为Spark会执行这些操作)。
  • 这些格式都非常冗长(特别是JSON和XML),这大大增加了文件的大小。

那么为什么不使用像RDBMS所使用的二进制格式呢?因为每个供应商都有自己的格式,所以最终会出现无数种格式。其他格式,如COBOL Copybook或它的编程语言One (PL/I),或IBM的高级汇编程序(HLASM),将过于复杂,并链接到IBM的大型机,因而不能通用地使用。

因此,必须开发新的模式,和往常一样,该行业创造了过剩。最流行的是Avro, ORC和Parquet。

在大多数组织中,您可能无法选择必须处理的格式。这个选择可能已经做出了。一些文件格式可能是从您的团队开始使用的Hadoop分发版继承而来的。但是,如果您的组织还没有做出选择,下面的快速定义可以帮助您做出更明智的决定。

您还可能不时遇到其他文件格式,但我刚才提到的是最流行的。让我们逐个来看一看。

804e517147d75740e037683b4cd29b7b.png

图7.7一个经典的大数据场景,从多个来源接入、转换和导出。本节将介绍传统文件格式的局限性以及Avro、ORC和Parquet在大数据环境中的优势。

7.8.2 Avro是一种基于模式的序列化格式

Apache Avro是一个数据序列化系统,它以紧凑、快速和二进制数据格式提供丰富的数据结构。

Avro以类似协议缓冲区(Protobuf)的方式被设计用于远程过程调用(rpc),Protobuf是谷歌开发并开放源代码的一种用于传输序列化数据的流行方法;更多信息请访问https://developers.google.com/protocol-buffers/。Avro支持模式的动态修改。Avro提供了一个用JSON编写的模式。因为Avro文件是基于行的,所以文件更容易分割,就像CSV一样。

Avro可在Java、C、c++、c#、Go、Haskell、Perl、PHP、Python、Ruby和Scala中使用。Avro的参考可以在https://avro.apache.org/docs/current/找到。

7.8.3 ORC是一种列存储格式

Apache Optimized Row Columnar (ORC)及其前身RCFile是一种列存储格式。ORC是acid兼容的(原子性、一致性、隔离性、持久性)。

除了标准数据类型之外,ORC还支持复合类型,包括结构、列表、映射和联合。ORC支持压缩,这可以减少文件大小和网络传输时间(对于大数据来说,这是额外的好处)。

Apache ORC是由Hortonworks支持的,这意味着所有基于Cloudera的工具,比如Impala(一个用于存储在Hadoop集群中的数据的SQL查询引擎),可能并不完全支持ORC。随着Hortonworks和Cloudera的合并,我们还不知道对这些文件格式的支持有什么期待。

ORC可在Java和c++中使用。ORC的介绍可以在https://orc.apache.org/找到。

7.8.4 Parquet也是一种列存储格式

与ORC一样,Apache Parquet也是一种列存储文件格式。Parquet支持压缩,并且您可以在模式的末尾添加列。Parquet还支持复合类型,比如列表和map。

Parquet似乎是大数据从业者中最流行的格式。Apache Parquet由Cloudera支持,并与Twitter合作。同样,随着Hortonworks和Cloudera的合并,我们还不知道对这些文件格式的支持有什么期待。不过,Parquet似乎更受欢迎。

Parquet在Java中可用。Parquet的介绍可以在https:// parquet.apache.org/中找到。

7.8.5 Avro、ORC、Parquet的比较

大数据文件格式增加了一层复杂性。然而,我希望您能理解它们的必要性以及它们之间的区别。以下是ORC, Parquet和Avro所共有的品质:

  • 它们是二进制格式。
  • 他们嵌入他们的模式。Avro在其模式中使用JSON提供了最大的灵活性。
  • 他们压缩数据。Parquet和ORC比Avro更擅长压缩。

从受欢迎程度来看,如果你有选择的话,Parquet可能是最好的选择。请记住,您的组织可能已经有了大数据文件格式的标准,即使它不是标准的,坚持这个选择也可能是一个好主意。

如果你对更多的技术细节感兴趣,可以阅读Alex Woodie的《大数据文件格式解密》(http://mng.bz/2JBa)和凯文·哈斯的《Hadoop文件格式:它不再只是CSV》(http://mng.bz/7zAQ)。这两篇文章都是在Hortonworks和Cloudera合并之前写的。

7.9 接入Avro, ORC和Parquet文件

(未完待续......)  欢迎关注公众号,及时获得最新翻译内容:

379c64b3e2de1b6c1408b73b38847db6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值