首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Azure Databricks中读取空增量分区而不失败?

如何在Azure Databricks中读取空增量分区而不失败?
EN

Stack Overflow用户
提问于 2022-02-04 11:01:34
回答 1查看 235关注 0票数 1

我在找个解决办法。有时,我们的自动化框架会读取不存在的增量分区。它将失败,因为在这个分区中没有拼板文件。

我不希望它失败。

然后我要做的是:

代码语言:javascript
复制
spark_read.format('delta').option("basePath",location) \
  .load('/mnt/water/green/date=20221209/object=34')

相反,我希望它返回空的数据。返回没有记录的数据文件。

我这样做了,但发现它有点麻烦,我想知道是否有更好的方法。

代码语言:javascript
复制
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) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-04 11:41:51

你真的不需要用三角湖桌来耍这种把戏。这个技巧主要用于Parquet &其他文件格式,以避免扫描HDFS上的文件或非常昂贵的云存储。

您只需要加载数据,并使用where/filter过滤数据。这和你做的事情很相似:

代码语言:javascript
复制
df = spark_read.format('delta').load(location) \
  .filter("date = '20221209' and object = 34")

如果需要,当然可以自动提取这些值,可能会稍微简单一些:

代码语言:javascript
复制
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))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70985293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档