程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了检查 Databricks 笔记本中是否存在 S3 目录大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决检查 Databricks 笔记本中是否存在 S3 目录?

开发过程中遇到检查 Databricks 笔记本中是否存在 S3 目录的问题如何解决?下面主要结合日常开发的经验,给出你关于检查 Databricks 笔记本中是否存在 S3 目录的解决方法建议,希望对你解决检查 Databricks 笔记本中是否存在 S3 目录有所启发或帮助;

我在 Databricks 中工作,我试图从按序列排序的 S3 实例中获取镶木地板数据,但序列的某些部分丢失了。所以文件系统可能看起来像这样

 's3a://databricks-data/STAGING/18','s3a://databricks-data/STAGING/17','s3a://databricks-data/STAGING/16','s3a://databricks-data/STAGING/15','s3a://databricks-data/STAGING/14','s3a://databricks-data/STAGING/13','s3a://databricks-data/STAGING/12','s3a://databricks-data/STAGING/10','s3a://databricks-data/STAGING/09','s3a://databricks-data/STAGING/08','s3a://databricks-data/STAGING/07'

您会注意到 11 丢失了,这就是问题所在。这些文件夹中的一些偶尔会丢失,这不是系统性的或可预测的。因此,来自 Python 背景,我想我可以从序列中创建一个文件夹列表,然后测试这样的文件夹是否存在,如果存在,则读取数据,如果不存在,则跳过。像这样:

paths = ["s3a://databricks-data/STAGING/" + str(ii) for ii in range(100)]
paths = [p for p in paths if p.exists()] #**this check -- "p.exists()" -- is what I'm looking for**
df = spark.read.parquet(*paths)

有谁知道如何检查 Databricks 中是否存在文件夹/目录?我曾尝试使用 dbutils,但要么我正在使用不同的版本,要么我不知道我在做什么(可能两者都有),因为没有任何效果。我对 Databricks 很陌生,所以如果我能澄清这个问题,请告诉我。

解决方法

例如您可以使用 dbutils.fs.ls 来实现这样的功能:

def path_accessible(path):
  try:
    dbutils.fs.ls(path)
    return True
  except:
    pass

  return false

然后使用它:

paths = [p for p in paths if path_accessible(p)]

请注意,它会检查路径是否可访问 - 您可能由于凭据无效等而无法访问 - 您可以通过添加相应的 except 子句来改进它。

附言如果您这样做是为了加载数据的增量,我建议您虑使用 Auto Loader 的 Structured Streaming(即使在 trigger.once 模式下)-如果您有很多,从性能的角度来看可能会更好目录中的文件。

大佬总结

以上是大佬教程为你收集整理的检查 Databricks 笔记本中是否存在 S3 目录全部内容,希望文章能够帮你解决检查 Databricks 笔记本中是否存在 S3 目录所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。