请注意,Parquet文件在内部拆分为 row groups https://parquet.apache.org/documentation/latest/ 因此,通过使Parquet文件变大,如果基线Parquet文件不小,行组仍然可以是相同的。在处理上没有巨大的直接损失,但是相反,如果您的Parquet文件较小/很小(例如,行组不能跨越多个Parquet文件),读者有更多的机会利用可能较大/更优化的行组。 另外,较大的Parquet文件不会限制读卡器的并行性,因为每个Parquet文件可以在逻辑上分解为多个 splits (由一个或多个行组组成)。 较大的Parquet文件的唯一缺点是创建它们需要更多的内存。所以你可以当心,如果你需要提高Spark执行人的记忆。 row groups 是Parquet文件进行垂直分区的一种方法。每个 row group 有许多行块(每列一个,这是一种为parquet中的数据集提供水平分区的方法)。
2条答案
按热度按时间s71maibg1#
目标是每个文件大约1gb(spark分区)(1)。
理想情况下,您将使用snappy压缩(默认),因为snappy压缩的Parquet文件是可拆分的(2)。
使用snappy而不是gzip将显著增加文件大小,因此如果存储空间是一个问题,则需要考虑这一点。
.option("compression", "gzip")
是覆盖默认snappy压缩的选项。如果需要调整dataset/dataframe/rdd的大小/重新分区,请调用
.coalesce(<num_partitions>
或者最坏的情况.repartition(<num_partitions>)
功能。警告:重新分区(尤其是合并)可能会导致数据的重新排列,因此请谨慎使用。另外,Parquet文件的大小和所有文件的大小通常应该大于hdfs块大小(默认128mb)。
xpcnnkqh2#
请注意,Parquet文件在内部拆分为
row groups
https://parquet.apache.org/documentation/latest/
因此,通过使Parquet文件变大,如果基线Parquet文件不小,行组仍然可以是相同的。在处理上没有巨大的直接损失,但是相反,如果您的Parquet文件较小/很小(例如,行组不能跨越多个Parquet文件),读者有更多的机会利用可能较大/更优化的行组。
另外,较大的Parquet文件不会限制读卡器的并行性,因为每个Parquet文件可以在逻辑上分解为多个
splits
(由一个或多个行组组成)。较大的Parquet文件的唯一缺点是创建它们需要更多的内存。所以你可以当心,如果你需要提高Spark执行人的记忆。
row groups
是Parquet文件进行垂直分区的一种方法。每个row group
有许多行块(每列一个,这是一种为parquet中的数据集提供水平分区的方法)。