首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在spark中读取压缩的avro文件(.gz)?

在Spark中读取压缩的Avro文件(.gz)可以通过以下步骤实现:

  1. 导入必要的库和类:
代码语言:txt
复制
import org.apache.avro.generic.GenericRecord
import org.apache.avro.mapred.{AvroInputFormat, AvroWrapper}
import org.apache.hadoop.io.NullWritable
  1. 创建SparkSession:
代码语言:txt
复制
val spark = SparkSession.builder().appName("Read Compressed Avro File in Spark").getOrCreate()
  1. 设置输入路径和压缩编解码器:
代码语言:txt
复制
val inputPath = "path/to/compressed_avro.gz"
spark.conf.set("spark.hadoop.mapred.input.dir.recursive", "true") // 对于目录递归搜索
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.inputdir", inputPath)
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.inputdir.recursive", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.inputdir.nonrecursive", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dirs", inputPath)
spark.conf.set("spark.hadoop.mapred.input.dir", inputPath)
spark.conf.set("spark.hadoop.mapred.input.dir.recursive", "true")
spark.conf.set("spark.hadoop.mapred.input.dir.nonrecursive", "true")
spark.conf.set("spark.hadoop.mapred.input.dirs", inputPath)
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dirs", inputPath)
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dirs.recursive", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dirs.nonrecursive", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dirs.list.status", inputPath)
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dirs.listing.prune", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.list-status.num-threads", "5")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.list-status.threads.sleep-ms", "1000")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune", "true")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.interval-ms", "5000")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.offset-interval-ms", "5000")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.threads", "5")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.file-cache-size", "5000")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.use-partial-listing", "true")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.time-interval", "5000")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.maxsize", "134217728")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.minsize", "134217728")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.minsize.per.node", "134217728")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.minsize.per.rack", "134217728")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.nonrecursive", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.non-recursive", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.list-status.num-threads", "5")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.minsize.per.node.calculator", "org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat$OneBlockPerSplit")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.minsize.per.rack.calculator", "org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat$OneBlockPerSplit")
spark.conf.set("spark.hadoop.mapred.input.format.class", classOf[AvroInputFormat[GenericRecord]].getName)
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.inputformat", classOf[AvroInputFormat[GenericRecord]].getName)
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.inputformat", "org.apache.hadoop.mapreduce.lib.input.AvroKeyInputFormat")
spark.conf.set("spark.hadoop.mapred.input.format.class", "org.apache.hadoop.mapreduce.lib.input.AvroKeyInputFormat")
spark.conf.set("spark.hadoop.mapred.input.dir.recursive", "true")
spark.conf.set("spark.hadoop.mapred.input.pathFilter.class", "org.apache.hadoop.fs.PathFilter")
spark.conf.set("spark.hadoop.mapred.input.pathFilter.class", "org.apache.hadoop.mapred.SimpleRegexPathFilter")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.list-status.num-threads", "5")
spark.conf.set("spark.hadoop.mapred.input.dir.listing.interval-ms", "5000")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.list-status.threads.sleep-ms", "1000")
spark.conf.set("spark.hadoop.mapred.input.dir.listing.prune.file-cache-size", "5000")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.list-status.threads.sleep-ms", "1000")
spark.conf.set("spark.hadoop.mapred.input.dir.recursive", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive", "true")
spark.conf.set("spark.hadoop.mapred.input.dirs", inputPath)
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir", inputPath)
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.inputdir", inputPath)
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir", inputPath)
spark.conf.set("spark.hadoop.mapred.input.dir", inputPath)
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.interval-ms", "5000")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.offset-interval-ms", "5000")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.maxsize", "134217728")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.minsize", "134217728")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.nonrecursive", "true")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.use-partial-listing", "true")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.time-interval", "5000")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.minsize.per.node", "134217728")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.minsize.per.node.calculator", "org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat$OneBlockPerSplit")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.minsize.per.rack", "134217728")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.minsize.per.rack.calculator", "org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat$OneBlockPerSplit")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.non-recursive", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.non-recursive", "true")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.threads", "5")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dirs.recursive", "true")
spark.conf.set("spark.hadoop.mapreduce.input.fileinputformat.input.dirs.nonrecursive", "true")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.file-cache-size", "5000")
spark.conf.set("spark.hadoop.mapred.input.dirs.listing.prune.threads", "5")
spark.conf.set("spark.hadoop.mapred.input.format.class", classOf[AvroInputFormat[GenericRecord]].getName)
  1. 读取压缩的Avro文件:
代码语言:txt
复制
val avroRDD = spark.sparkContext.hadoopFile[AvroWrapper[GenericRecord], NullWritable, AvroInputFormat[GenericRecord]](inputPath)
val records = avroRDD.map(record => record._1.get())
  1. 对records进行进一步处理:
代码语言:txt
复制
records.foreach(println)

需要注意的是,以上代码中的inputPath应该替换为实际的文件路径,同时确保相关的库已经正确导入。

关于Spark、Avro和压缩文件的更多信息,请参考腾讯云的相关文档和产品介绍链接:

  • Spark文档:https://cloud.tencent.com/document/product/1007
  • Avro文档:https://cloud.tencent.com/document/product/849
  • 压缩文件产品介绍:https://cloud.tencent.com/product/compress
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

何在Scala读取Hadoop集群上gz压缩文件

存在Hadoop集群上文件,大部分都会经过压缩,如果是压缩文件,我们直接在应用程序如何读取里面的数据?...答案是肯定,但是比普通文本读取要稍微复杂一点,需要使用到Hadoop压缩工具类支持,比如处理gz,snappy,lzo,bz压缩,前提是首先我们Hadoop集群得支持上面提到各种压缩文件。...本次就给出一个读取gz压缩文件例子核心代码: 压缩和解压模块用工具包是apache-commons下面的类: import org.apache.commons.io.IOUtils import...,其实并不是很复杂,用java代码和上面的代码也差不多类似,如果直接用原生api读取会稍微复杂,但如果我们使用Hive,Spark框架时候,框架内部会自动帮我们完成压缩文件读取或者写入,对用户透明...,当然底层也是封装了不同压缩格式读取和写入代码,这样以来使用者将会方便许多。

2.7K40

读取nii或nii.gz文件信息即输出图像操作

读取nii或者nii.gz文件信息,并且输出图像。...或者nii.gz文件路径 img = nib.load(file) print(img) print(img.header['db_name']) #输出nii文件 width, height....nii 数据(2D显示) 【环境】win10 + python3.6 + SimpleITK nii文件是NIFTI格式文件,出现原因是原来一种图像格式是ANALYZE 7.5 format,但是这个图像格式缺少一些信息...,比如没有方向信息,病人左右方位等,如果需要包括额外信息,就需要一个额外文件,比如ANALYZE7.5就需要一对<.hdr, .img 文件来保存图像完整信息。...以上这篇读取nii或nii.gz文件信息即输出图像操作就是小编分享给大家全部内容了,希望能给大家一个参考。

4.3K20
  • 何在linux查看存档或压缩文件内容

    归档与压缩文件 归档是将多个文件文件夹或两者合并为一个文件过程。在这种情况下,生成文件不会被压缩压缩是一种将多个文件文件夹或两者合并为一个文件并最终压缩生成文件方法。...$ vim rumenz.tar.gz 你甚至可以浏览存档并打开存档文本文件(如果有)。要打开文本文件,只需使用箭头键将鼠标光标放在文件前面,然后按 ENTER 即可打开它。...8.使用zcat命令 要查看压缩存档文件内容而不使用zcat命令解压缩它,我们执行以下操作: $ zcat rumenz.tar.gz zcat 与gunzip -c命令相同。...因此,你还可以使用以下命令查看存档/压缩文件内容: $ gunzip -c rumenz.tar.gz 9.使用zless命令 要使用 zless 命令查看存档/压缩文件内容,只需执行以下操作: $...10.使用less命令 你可能已经知道,less命令可用于打开文件进行交互式阅读,允许滚动和搜索。 运行以下命令以使用less命令查看存档/压缩文件内容: $ less rumenz.tar.gz

    2K00

    何在 Java 读取处理超过内存大小文件

    读取文件内容,然后进行处理,在Java我们通常利用 Files 类方法,将可以文件内容加载到内存,并流顺利地进行处理。但是,在一些场景下,我们需要处理文件可能比我们机器所拥有的内存要大。...但是,要包含在报告,服务必须在提供每个日志文件至少有一个条目。简而言之,一项服务必须每天使用才有资格包含在报告。...使用所有文件唯一服务名称创建字符串列表。 生成所有服务统计信息列表,将文件数据组织到结构化地图中。 筛选统计信息,获取排名前 10 服务调用。 打印结果。...方法逐行读取文件,并将其转换为流。...这里关键特征是lines方法是惰性,这意味着它不会立即读取整个文件;相反,它会在流被消耗时读取文件。 toLogLine 方法将每个字符串文件行转换为具有用于访问日志行信息属性对象。

    20710

    大数据平台:资源管理及存储优化技术

    ; 资源成本优化:根据资源使用情况分析,可分别对存储、计算资源进行优化,根据数据热度,对存储文件进行压缩或删除;停止Yarn孤子任务,减少计算成本;分析任务运行情况,自动给出对应优化建议;...Job等方式对拉取数据进行解析分析,计算目录下总文件、小文件总数等指标,并将计算结果保存对应DB(MySQL、Phoenix); 运维调度:基于设置规则周期性或手动触发调度任务,执行对应运维操作...重启耗时长:若重启NameNode,需要触发元数据重新加载到内存,导致恢复启动时间较长 大量随机IO:一次大文件顺序读取性能往往优于大量文件随机读取性能 现有的小文件合并方法主要包括: Hadoop...,HDFS文件类型与压缩方式 拼装执行规则:根据不同文件类型和压缩方式,拼装对应执行规则,在合并过程,针对相同文件类型进行合并,而合并前需要将压缩文件先解压后再合并 支持合并类型:(1)....基于Spark作业执行合并时,需要保证合并前后文件类型和压缩压缩方式一致。

    75195

    Spark Core快速入门系列(11) | 文件数据读取和保存

    文件读取数据是创建 RDD 一种方式.   把数据保存文件操作是一种 Action.   ...Spark 数据读取及数据保存可以从两个维度来作区分:文件格式以及文件系统。   ...读取 Json 文件   如果 JSON 文件每一行就是一个 JSON 记录,那么可以通过将 JSON 文件当做文本文件读取,然后利用相关 JSON 库对每一条数据进行 JSON 解析。   ...在Hadoop压缩形式存储数据,不需要指定解压方式就能够进行读取,因为Hadoop本身有一个解压器会根据压缩文件后缀推断解压算法进行解压....如果用Spark从Hadoop读取某种类型数据不知道怎么读取时候,上网查找一个使用map-reduce时候是怎么读取这种这种数据,然后再将对应读取方式改写成上面的hadoopRDD和newAPIHadoopRDD

    2K20

    ApacheHudi常见问题汇总

    另外,如果你ETL /hive/spark作业很慢或占用大量资源,那么Hudi可以通过提供一种增量式读取和写入数据方法来提供帮助。...读时合并(Merge On Read):此存储类型使客户端可以快速将数据摄取为基于行(avro数据格式。...更新现有的行将导致:a)写入从以前通过压缩(Compaction)生成基础parquet文件对应日志/增量文件更新;或b)在未进行压缩情况下写入日志/增量文件更新。...请参阅此处示例。 当查询/读取数据时,Hudi只是将自己显示为一个类似于json层次表,每个人都习惯于使用Hive/Spark/Presto 来对Parquet/Json/Avro进行查询。...Hudi如何在数据集中实际存储数据 从更高层次上讲,Hudi基于MVCC设计,将数据写入parquet/基本文件以及包含对基本文件所做更改日志文件不同版本。

    1.8K20

    「Hudi系列」Hudi查询&写入&常见问题汇总

    简而言之,映射文件组包含一组记录所有版本。 存储类型和视图 Hudi存储类型定义了如何在DFS上对数据进行索引和布局以及如何在这种组织之上实现上述原语和时间轴活动(即如何写入数据)。...更新记录到增量文件,然后进行同步或异步压缩以生成列文件新版本。...对于具有大量更新工作负载,读取时合并存储提供了一种很好机制,可以快速将其摄取到较小文件,之后通过压缩将它们合并为较大基础文件。...读时合并(Merge On Read):此存储类型使客户端可以快速将数据摄取为基于行(avro数据格式。...对于实时视图(Real time views),性能类似于Hive/Spark/PrestoAvro格式表。 26.

    6.4K42

    收藏!6道常见hadoop面试题及答案解析

    在Hadoop存储数据之前,你需要考虑以下几点:   数据存储格式:有许多可以应用文件格式(例如CSV,JSON,序列,AVRO,Parquet等)和数据压缩算法(例如snappy,LZO,gzip...CSV文件对模式评估支持是有限,因为新字段只能附加到记录结尾,并且现有字段不能受到限制。CSV文件不支持块压缩,因此压缩CSV文件会有明显读取性能成本。   ...由于读取序列文件复杂性,它们更适合用于在飞行(即中间)数据存储。 注意:序列文件是以Java为中心,不能跨平台使用。   Avro文件适合于有模式长期存储。...Avro文件存储具有数据元数据,但也允许指定用于读取文件独立模式。启用完全模式进化支持,允许你通过定义新独立模式重命名、添加和删除字段以及更改字段数据类型。...Avro文件以JSON格式定义模式,数据将采用二进制JSON格式。Avro文件也是可拆分,并支持块压缩。更适合需要行级访问使用模式。这意味着查询该行所有列。

    2.6K80

    Spark2.3.0 创建RDD

    有两种方法可以创建 RDD 对象: 在驱动程序并行化操作已存在集合来创建 RDD 从外部存储系统引用数据集(:共享文件系统、HDFS、HBase 或者其他 Hadoop 支持数据源)。 1....该方法根据URL获取文件(机器本地路径,或 hdfs:// , s3n:// 等等),并按行读取。...要么能复制文件到所有的工作节点,要么能使用网络方式共享文件系统。 (2) Spark 所有基于文件输入方法,包括 textFile,能很好地支持文件目录,压缩文件和通配符。...除了文本文件Spark Java API 还支持其他几种数据格式: (1) JavaSparkContext.wholeTextFiles 可以读取包含多个小文本文件目录,并将它们以(文件名,内容...这是一种效率不高专有格式, Avro,它提供了简单方法来保存任何一个 RDD。 Spark版本: 2.3.0

    84420

    2021年大数据Spark(三十二):SparkSQLExternal DataSource

    2.4版本添加支持Image Source(图像数据源)和Avro Source。...例如,Parquet和ORC等柱状格式使从列子集中提取值变得更加容易。 基于行存储格式(Avro)可有效地序列化和存储提供存储优势数据。然而,这些优点通常以灵活性为代价。...以读取github操作日志JSON数据为例,数据结构如下:  1)、操作日志数据使用GZ压缩:2015-03-01-11.json.gz,先使用json方法读取。  ...json格式数据(压缩)     val jsonDF: DataFrame = spark.read.json("data/input/2015-03-01-11.json.gz")     //jsonDF.printSchema...()   } } 运行结果: ​​​​​​​csv 数据 在机器学习,常常使用数据存储在csv/tsv文件格式,所以SparkSQL也支持直接读取格式数据,从2.0版本开始内置数据源。

    2.3K20

    ApacheHudi使用问题汇总(二)

    对于实时视图(Real time views),性能类似于Hive/Spark/PrestoAvro格式表。 6....可以配置最大日志大小和一个因子,该因子表示当数据从avro转化到parquet文件时大小减小量。 HUDI-26将较小文件组合并成较大文件组,从而提升提升性能。 7....为什么必须进行两种不同配置才能使Spark与Hudi配合使用 非Hive引擎倾向于自己列举DFS上文件来查询数据集。例如,Spark直接从文件系统(HDFS或S3)读取路径。...Sparkparquet读取能力。...为保持parquet文件读取性能优势,我们将 HoodieROTablePathFilter设置为路径过滤器,并在Spark Hadoop Configuration中指定,确保始终选择Hudi相关文件文件

    1.8K40

    大数据文件格式对比 Parquet Avro ORC 特点 格式 优劣势

    如何使用它为一个特定用例和特定数据管道。数据可以存储为可读格式JSON或CSV文件,但这并不意味着实际存储数据最佳方式。...基于列(在列存储数据):用于数据存储是包含大量读取操作优化分析工作负载 与Snappy压缩压缩率高(75%) 只需要列将获取/读(减少磁盘I / O) 可以使用Avro API和Avro读写模式...用于(在列存储数据):用于数据存储是包含大量读取操作优化分析工作负载 高压缩率(ZLIB) 支持Hive(datetime、小数和结构等复杂类型,列表,地图,和联盟) 元数据使用协议缓冲区存储,允许添加和删除字段...压缩率:基于列存储区Parquet和ORC提供压缩率高于基于行Avro格式。...可兼容平台:ORC常用于Hive、Presto; Parquet常用于Impala、Drill、Spark、Arrow; Avro常用于Kafka、Druid。

    5K21

    如何使用Sparklocal模式远程读取Hadoop集群数据

    我们在windows开发机上使用sparklocal模式读取远程hadoop集群hdfs上数据,这样目的是方便快速调试,而不用每写一行代码或者一个方法,一个类文件都需要打包成jar上传到linux...一个样例代码如下: 如何在spark遍历数据时获取文件路径: 如果遍历压缩文件时想要获取文件名,就使用newAPIHadoopFile,此外在本地调试下通过之后,提交到集群运行时候,一定要把uri去掉...,就是读取mysql一个表数据,写入另外一个mysql,这里跟MR没有关系,但是我依然可以用spark-sumbit提交,这时候是不会提交到YARN上,但是程序会按普通程序运行,程序依赖jar包,...最后,sparkwholeTextFiles对gz压缩支持不太友好,不能直接访问,相关问题,请参考: http://stackoverflow.com/questions/24402737/how-to-read-gz-files-in-spark-using-wholetextfiles.../stackoverflow.com/questions/24402737/how-to-read-gz-files-in-spark-using-wholetextfiles?

    2.9K50

    深度对比 Apache CarbonData、Hudi 和 Open Delta 三大开源数据湖方案

    读取时合并:使用列(parquet) +行(Avro文件格式组合存储数据。更新记录到增量文件,并随后压缩以同步或异步生成列文件新版本。...增量查询:对于写入时复制表,增量查询提供自给定提交或压缩后写入表新数据,提供更改流以启用增量数据管道。 读取优化查询:查询查看指定提交/压缩操作后表最新快照。...与Spark深度集成可能是最好特性,事实上,它是唯一一个具有Spark SQL特定命令(例如:MERGE),它还引入了有用DML,直接在Spark更新WHERE或DELETE WHERE。...Delta Lake不支持真正数据血缘关系(即跟踪数据何时以及如何在Delta Lake复制数据能力),但是有审计和版本控制(在元数据存储旧模式)。...CarbonData是市场上最早产品,由于物化视图、二级索引等先进索引,它具有一定竞争优势,并被集成到各种流/AI引擎Flink、TensorFlow,以及Spark、Presto和Hive

    2.6K20

    「大数据系列」:Apache Hive 分布式数据仓库项目介绍

    Apache Hive™数据仓库软件有助于读取,编写和管理驻留在分布式存储大型数据集并使用SQL语法进行查询 Hive 特性 Hive构建于Apache Hadoop™之上,提供以下功能: 通过SQL...轻松访问数据工具,从而实现数据仓库任务,提取/转换/加载(ETL),报告和数据分析。...一种在各种数据格式上强加结构机制 访问直接存储在Apache HDFS™或其他数据存储系统(Apache HBase™)文件 通过Apache Tez™,Apache Spark™或MapReduce...,CLI,数据类型, DDL(创建/删除/更改/截断/显示/描述),统计(分析),索引,存档, DML(加载/插入/更新/删除/合并,导入/导出,解释计划), 查询(选择),运算符和UDF,锁,授权 文件格式和压缩...:RCFile,Avro,ORC,Parquet; 压缩,LZO 程序语言:Hive HPL / SQL Hive配置属性 HIve 客户端 Hive客户端(JDBC,ODBC,Thrift) HiveServer2

    1.7K20

    【大数据哔哔集20210111】HDFS常用压缩算法及区别

    主要考虑到: 文件压缩算法组合是否支持可分片, MapReduce在读取数据时候需要并行, 这就要求压缩文件可以分片读取。...io读取性能, 读取相同信息量信息, 压缩文件不仅占用存储空间低, 而且还会提高磁盘io读取效率。...HDFS文件类型 基于文件存储 序列化和列式存储,例如:Avro、RCFile和Parquet 压缩存储,例如Snappy、LZO等 下面我们依次来介绍。...Avro将模式存储在文件头中,所以每个文件都是自描述,而且Avro还支持模式演进(schema evolution),也就是说,读取文件模式不需要与写入文件模式严格匹配,当有新需求时,可以在模式中加入新字段...ORC文件是自描述,它元数据使用Protocol Buffers序列化,并且文件数据尽可能压缩以降低存储空间消耗,目前也被Spark SQL、Presto等查询引擎支持。

    1.1K10
    领券