首页 > 解决方案 > Spark parquet 读取性能

问题描述

我有一个月的数据存储在 HDFS 中。31 个文件夹,每个文件夹按日期表示yyyy-mm-dd。例如:2020-01-30

每 5 分钟我们将获取数据,并将数据保存spark append mode为镶木地板文件。所以一小时有 12 个文件,一天有 288 个文件。所以每个文件夹包含大约 288 个 parquet 文件。所以对于一月份,它是关于8928(31*288)镶木地板文件的。

我将使用 spark 读取数据。

读取这么多文件会导致任何性能问题吗?

另外,如果我每天维护一个文件。假设每天只包含一个 parquet 文件,而在一月​​份,31parquet 文件。

如果我这样做,性能会有所提高吗?

标签: apache-sparkparquet

解决方案


如果您可以将一天的数据汇总到更少的文件中,那么您的性能肯定会提高。根据每个文件的大小以及 Spark 作业的数量或执行程序/核心,您将找到正确数量的分区。如果您写下有关数据的详细信息,例如大小、列数、每天的条目数和列类型(字符串、日期、整数等),我们将能够告诉您一个建议的最佳数字来聚合您的数据每天或每小时。

我通常按​​天划分:

../my_parquet_table/year=2020/month=01/day=31/*.parquet

在这个级别,我通常会保留所有 parquet 文件以减小块的大小(在我的情况下为 256MB)。


推荐阅读