如何从分布式环境访问位于 S3 存储桶中的 DBFS 文件?
How to access DBFS files located in an S3 bucket from a distributed environment?
我将文件存储在 prod
和 test
环境的 S3 存储桶中。我的代码将在两个环境的分布式系统中执行。我想从 DBFS 访问文件,因为 DBFS 由 S3 支持,并且它的存储桶装载是指向 S3 位置的指针。
如何在不知道执行位置(产品或测试)的情况下从代码访问文件?
目前我已经设法像这样访问测试环境中的文件:
private static final File DATA_FILE = new File("/dbfs/mnt/test-env-bucket/data/test-data.json");
但我需要提供一个 DBFS 文件的相对路径,例如 /data/test-data.json
,并以某种方式检测我们是在 prod
还是 test
环境中,并相应地选择存储桶。如果 test-data.json
文件同时存在于 S3 上的 test-env-bucket 和 prod-env-bucket 中,我该如何实现?
你有两个数据块实例吗?
尝试像这样挂载不同的点
产品:
dbutils.fs.mount("s3a://%s:%s@%s" % (ACCESS_KEY, ENCODED_SECRET_KEY, AWS_PRODUCTION_BUCKET_NAME), "/mnt/data")
开发人员:
dbutils.fs.mount("s3a://%s:%s@%s" % (ACCESS_KEY, ENCODED_SECRET_KEY, AWS_DEVELOP_BUCKET_NAME), "/mnt/data")
并且仅使用:
private static final File DATA_FILE = new File("/dbfs/mnt/data/test-data.json");
我将文件存储在 prod
和 test
环境的 S3 存储桶中。我的代码将在两个环境的分布式系统中执行。我想从 DBFS 访问文件,因为 DBFS 由 S3 支持,并且它的存储桶装载是指向 S3 位置的指针。
如何在不知道执行位置(产品或测试)的情况下从代码访问文件? 目前我已经设法像这样访问测试环境中的文件:
private static final File DATA_FILE = new File("/dbfs/mnt/test-env-bucket/data/test-data.json");
但我需要提供一个 DBFS 文件的相对路径,例如 /data/test-data.json
,并以某种方式检测我们是在 prod
还是 test
环境中,并相应地选择存储桶。如果 test-data.json
文件同时存在于 S3 上的 test-env-bucket 和 prod-env-bucket 中,我该如何实现?
你有两个数据块实例吗?
尝试像这样挂载不同的点
产品:
dbutils.fs.mount("s3a://%s:%s@%s" % (ACCESS_KEY, ENCODED_SECRET_KEY, AWS_PRODUCTION_BUCKET_NAME), "/mnt/data")
开发人员:
dbutils.fs.mount("s3a://%s:%s@%s" % (ACCESS_KEY, ENCODED_SECRET_KEY, AWS_DEVELOP_BUCKET_NAME), "/mnt/data")
并且仅使用:
private static final File DATA_FILE = new File("/dbfs/mnt/data/test-data.json");