【问题标题】:PathNotFound error message: openFileForRead must be used with files and not directoriesPathNotFound 错误消息:openFileForRead 必须与文件而不是目录一起使用
【发布时间】:2021-11-03 07:59:10
【问题描述】:

我正在使用以下代码使用 Azure 数据块读取 excel 文件:

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 会正确读取文件。

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

【问题讨论】:

  • 你想对数据做什么?合并成一个数据框?
  • 是的,我想将所有数据合并到一个数据帧中。

标签: python apache-spark pyspark databricks azure-databricks


【解决方案1】:

如果您需要从一个目录中读取多个 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

数据帧可能在结构上不兼容,在这种情况下,您可能需要进行一些显式转换等。

【讨论】:

    猜你喜欢
    • 2013-04-08
    • 1970-01-01
    • 2016-09-29
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多