表分区列的最大值 vs 同表的显示分区结果的最大值

问题描述 投票:0回答:1

假设我有一个包含客户订单的表,(仅)按

date_transaction
进行分区。我想找到
date_transaction
的最大值。

以前,我只是运行

spark.sql("SELECT MAX(date_transaction) FROM orders").first()
(幼稚的方法)。

我最近发现我可以使用

spark.sql("SHOW PARTITIONS orders").toPandas().max()
+ 一些字符串清理(显示分区方法)。

我注意到使用显示分区可以使该过程更快,因为 Spark 不需要扫描整个表。

我能想到的一个缺点是,如果最大日期事务中没有数据,显示分区仍将返回它,而天真的方法将返回正确的日期(是否可能有空分区?)。

我想知道显示分区方法是否还有其他我没有想到的缺点。

非常感谢您的意见。谢谢您,祝您有美好的一天。

apache-spark pyspark apache-spark-sql
1个回答
0
投票

如果您使用

SHOW PARTITIONS
方法,它将 返回所有分区值(即使其中某些分区中没有数据),

SELECT MAX(date_transaction)
方法可确保仅考虑非空分区

# You can combine the 2 apporaches with if else condition
max_partition = spark.sql("SHOW PARTITIONS orders").toPandas()['partition'].max()

import re
max_partition_date = re.search(r'date_transaction=(\d{4}-\d{2}-\d{2})', max_partition).group(1)

result = spark.sql(f"SELECT COUNT(*) FROM orders WHERE date_transaction = '{max_partition_date}'").first()

if result[0] > 0:
    print(f"The maximum date with data is: {max_partition_date}")
else:
    max_date_with_data = spark.sql("SELECT MAX(date_transaction) FROM orders").first()[0]
    print(f"The maximum date with actual data is: {max_date_with_data}")
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.