如何使用DataFrames检测HDFS数据集/表的指定分区是否存在
检测HDFS分区数据集特定分区是否存在的方案
以下方案均基于PySpark实现,优先推荐元数据查询方案,避免扫描全量数据集。
方法1:元数据查询(最高效,优先使用)
如果你的person_details表已经注册到Spark元数据(包括Hive Metastore),可以直接通过Spark SQL查询分区元数据,全程不会扫描实际数据文件:
target_date = "20210906" # 查询指定分区是否在元数据中存在 partition_check_df = spark.sql(f"SHOW PARTITIONS person_details PARTITION(date='{target_date}')") # 返回结果行数大于0即代表分区存在 is_exists = partition_check_df.count() > 0
如果你的date分区是整数类型,去掉SQL语句里date值两侧的单引号即可
方法2:DataFrame过滤判断(兼容未注册元数据的场景)
如果是直接读取HDFS路径的分区目录,没有注册到元数据,可以通过条件过滤+ limit优化实现,不会扫描全表:
target_date = "20210906" # 读取数据集根目录,存储格式如果不是parquet,替换为对应的读取方法即可 df = spark.read.parquet("hdfs://<path>/person_details/") # 只过滤目标分区,加limit(1)后只要找到任意一个分区下的文件就会终止扫描 is_exists = df.filter(f"date = '{target_date}'").limit(1).count() > 0
内容的提问来源于stack exchange,提问作者Sudipto Dutta
相关产品推荐
相关产品推荐

