首页 > 解决方案 > spark使用通配符读取blob存储

问题描述

我想使用数据块将 Azure Blob 存储文件读入 Spark。但我不想设置特定文件或*为每一级嵌套。

标准:**/*/不工作。这些工作得很好:

val df = spark.read.format("avro").load("dbfs:/mnt/foo/my_file/0/2019/08/24/07/54/10.avro")
val df = spark.read.format("avro").load("dbfs:/mnt/foo/my_file/*/*/*/*/*/*")

失败:

java.io.FileNotFoundException: No Avro files found. If files don't have .avro extension, set ignoreExtension to true

为了

val df = spark.read.format("avro").load("dbfs:/foo/my_file/test/**/*")

标签: apache-sparkazure-blob-storagedatabricksazure-databricks

解决方案


默认情况下,Spark 以递归方式向下读取 - 因此您只需指向根文件夹:

val df = spark.read.format("avro").load("dbfs:/foo/my_file/test/")

路径值实际上是一个正则表达式。

**什么也没做

*将起作用-尽管它通常以{*}称为 globbing 的形式完成。这值得一读:How to use regex to include/exclude some input files in sc.textFile?


推荐阅读