apache-spark - Spark parquet 读取性能
问题描述
我有一个月的数据存储在 HDFS 中。31 个文件夹,每个文件夹按日期表示yyyy-mm-dd
。例如:2020-01-30
每 5 分钟我们将获取数据,并将数据保存spark append mode
为镶木地板文件。所以一小时有 12 个文件,一天有 288 个文件。所以每个文件夹包含大约 288 个 parquet 文件。所以对于一月份,它是关于8928(31*288)
镶木地板文件的。
我将使用 spark 读取数据。
读取这么多文件会导致任何性能问题吗?
另外,如果我每天维护一个文件。假设每天只包含一个 parquet 文件,而在一月份,31
parquet 文件。
如果我这样做,性能会有所提高吗?
解决方案
如果您可以将一天的数据汇总到更少的文件中,那么您的性能肯定会提高。根据每个文件的大小以及 Spark 作业的数量或执行程序/核心,您将找到正确数量的分区。如果您写下有关数据的详细信息,例如大小、列数、每天的条目数和列类型(字符串、日期、整数等),我们将能够告诉您一个建议的最佳数字来聚合您的数据每天或每小时。
我通常按天划分:
../my_parquet_table/year=2020/month=01/day=31/*.parquet
在这个级别,我通常会保留所有 parquet 文件以减小块的大小(在我的情况下为 256MB)。
推荐阅读
- python - geoviews 数据集在覆盖 holoviews 平铺源时将纬度/经度转换为小数
- memory - JDK 11(和更新版本)DirectByteBuffer 即使在启动时也拥有大量的堆外内存
- terraform - 如何在具有单独 tfstate 文件的项目之间共享与环境无关的资源?
- android - 使用屏幕宽度和纵横比计算视图高度在 1440p 屏幕上不起作用
- android - 如何使用其他人创建但未构建的应用程序?
- ruby - Shopify 帮助退货订单项属性
- python-3.x - Boto3 - 使用 CLI 参数将多文件上传到特定 S3 存储桶“路径”
- reactjs - 如何向 FlatList 添加新数据。(反应本机)
- javascript - 如何从 JavaScript 中的均值和标准截断正态分布中获取随机值?
- python - Rioxarray 维度缺少坐标