PathNotFound错误消息:openFileForRead必须与文件而不是目录一起使用



我使用下面的代码读取excel文件使用Azure databricks:

dfSource = spark 
.read 
.format("com.crealytics.spark.excel") 
.option("Header", "true") 
.option("inferSchema", "true") 
.load(sSourcePath)#.withColumn("SourceFile",F.input_file_name())

但是我得到下面的错误:

PathNotFound错误消息:openFileForRead必须用于文件而不是目录

当我给出完整的文件名时,Spark正确读取文件。

注意:我要读取文件夹中存在的所有文件。

如果您需要从一个目录中读取多个Excel文件,那么您只需要遍历这些文件,将每个文件读取到一个数据框中,并将所有这些数据框合并。在Databricks上,您可以使用dbutils.fs.ls函数列出给定目录中的文件,如下所示:

all_data = None
sSourcePath = "path_to_directory"
for f in dbutils.fs.ls(sSourcePath):
if not f.isFile or not f.name.endswith(".xlsx"):
continue
df = spark 
.read 
.format("com.crealytics.spark.excel") 
.option("Header", "true") 
.option("inferSchema", "true") 
.load(f.path)
if all_data:
all_data = all_data.union(df)
else:
all_data = df

有可能数据框架的结构不兼容,在这种情况下,你可能需要做一些显式的强制转换,等等。

最新更新