我在找个解决办法。有时,我们的自动化框架会读取不存在的增量分区。它将失败,因为在这个分区中没有拼板文件。
我不希望它失败。
然后我要做的是:
spark_read.format('delta').option("basePath",location) \
.load('/mnt/water/green/date=20221209/object=34')相反,我希望它返回空的数据。返回没有记录的数据文件。
我这样做了,但发现它有点麻烦,我想知道是否有更好的方法。
df = spark_read.format('delta').load(location)
folder_partition = /date=20221209/object=34'.split("/")
for folder_pruning_token in folder_partition :
folder_pruning_token_split = folder_pruning_token.split("=")
column_name = folder_pruning_token_split[0]
column_value = folder_pruning_token_split[1]
df = df .filter(df [column_name] == column_value) 发布于 2022-02-04 11:41:51
你真的不需要用三角湖桌来耍这种把戏。这个技巧主要用于Parquet &其他文件格式,以避免扫描HDFS上的文件或非常昂贵的云存储。
您只需要加载数据,并使用where/filter过滤数据。这和你做的事情很相似:
df = spark_read.format('delta').load(location) \
.filter("date = '20221209' and object = 34")如果需要,当然可以自动提取这些值,可能会稍微简单一些:
df = spark_read.format('delta').load(location)
folder_partition = '/date=20221209/object=34'.split("/")
cols = [f"{s[0]} = '{s[1]}'"
for s in [f.split('=')for f in folder_partition]
]
df = df.filter(" and ".join(cols))https://stackoverflow.com/questions/70985293
复制相似问题