现在Spark 2.4已经内置了对Avro格式的支持,我正在考虑将数据湖中某些数据集的格式从Parquet更改为Avro,这些数据集通常是针对整行而不是特定列聚合进行查询/联接的。
然而,数据之上的大部分工作都是通过Spark完成的,据我所知,Spark的内存缓存和计算是在列格式的数据上完成的。在这方面,Parquet是否提供了性能提升,而Avro是否会招致某种数据“转换”损失?在这方面,我还需要注意什么?
这两种格式在不同的约束下大放异彩,但具有具有架构的强类型和共同的二进制编码之类的东西。在其基本形式中,它归结为这种分化:
由于您已经将数据和摄取过程调整为编写Parquet文件,只要数据摄取(延迟)不会成为您的问题,您可能最好使用Parquet。
一个典型的用法实际上是混合使用Parket和Avro。最近、新到达的数据以Avro文件的形式存储,因为这使得数据可以立即进入数据湖。更多的历史数据会被转换,例如每天转换为Parket文件,因为它们更小,加载效率最高,但只能批量写入。在处理这些数据时,您可以将两个表作为两个表的联合加载到Spark中。因此,您可以使用Parket进行高效读取,并使用Avro立即提供数据。这种模式通常被Uber的Hudi或由Netflix开始的Apache Iceberg(孵化)等表格式所隐藏。
我有一个avro格式的数据流(json编码),需要存储为镶木地板文件。我只能这样做, 把df写成拼花地板。 这里的模式是从json中推断出来的。但是我已经有了avsc文件,我不希望spark从json中推断出模式。 以上述方式,parquet文件将模式信息存储为StructType,而不是avro.record.type。是否也有存储avro模式信息的方法。 火花 - 1.4.1
正在尝试读取avro文件。 无法将运行到Avro架构的数据转换为Spark SQL StructType:[“null”,“string”] 尝试手动创建架构,但现在遇到以下情况: 通用域名格式。databricks。火花阿夫罗。SchemaConverters$CompatibleSchemaException:无法将Avro架构转换为catalyst类型,因为路径处的架构不兼容(avroTyp
我通过两种方法生成拼花地板文件:动弹消防软管和火花作业。它们都被写入S3上相同的分区结构中。两组数据都可以使用相同的Athena表定义进行查询。两者都使用gzip压缩。 然而,我注意到Spark生成的拼花地板文件大约是Firehose生成的拼花地板文件的3倍大。有什么理由会这样吗?在使用Pyarrow加载模式和元数据时,我确实注意到了一些差异: 模式差异可能是罪魁祸首吗?还有别的原因吗? 这两个特
业务案例是,我们希望通过一个列作为分区,将一个大的拼花文件分割成多个小文件。我们已经使用data frame . partition(“XXX”)进行了测试。写(...).用了大约1个小时,记录了10万个条目。因此,我们将使用map reduce在不同的文件夹中生成不同的拼花文件。示例代码: 上面的例子只是生成一个文本文件,如何用multipleoutputformat生成一个parquet文件?
我有一个数据帧,它是由运行特定日期的每日批处理创建的,然后保存在HDFS(Azure Data Lake Gen 2)中。 它是用这样的东西保存的 如您所见,我没有对数据帧进行分区,因为它只包含一个日期。 例如,第一天的第一个文件将存储在文件夹中 交易/2019/08/25 然后第二天,它就会在文件夹里 贸易/2019/08/26 问题是,当所有数据都放好后,日期上的过滤器谓词是否仍会被按下,HD
有没有一种方法可以直接从基于avro模式的parquet文件在Amazon Athena中创建表?模式被编码到文件中,所以我需要自己实际创建DDL看起来很愚蠢。 我看到了这个,还有另一个复制品 但它们与Hive直接相关,这对雅典娜不起作用。理想情况下,我正在寻找一种以编程方式执行此操作的方法,而无需在控制台上定义它。