【问题标题】:spark python read multiple csv's to dataframespark python读取多个csv到数据框
【发布时间】:2020-01-23 16:10:27
【问题描述】:

我在数据湖上有多个 csv 文件。我可以连接到数据湖,甚至可以列出文件。但我需要将这些文件放在一个数据框中,这样我就可以将这个数据框加载到 SQL 中。加载到 SQL 也没有问题。 问题是只有 datalakefolder 中最后一个文件的内容被读取和写入 SQL(因此也在数据帧中)。可能是因为数据帧每次都被覆盖。但我不知道如何在每个周期将数据附加到数据帧 这是我使用的代码:

    for file in dayfolders.collect():
      filename = file.name
      pathname = file.path
      tablename = "Obelix" 
      if filename.endswith(".csv"): 
          df = spark.read.format("csv")\
          .option("inferschema", "true")\
          .option("header","true")\
          .load(file.path)
          continue
      else:
          continue 

如果我将语句 print(filename) 直接放在 for 语句之后,我可以看到它循环遍历三个文件。所有文件单独处理就好了

【问题讨论】:

    标签: python dataframe databricks


    【解决方案1】:

    您可以使用文件列表导入。它们会自动为您组合在一起。

    csv_import = sqlContext.read\
      .format('csv')\
      .options(sep = ',', header='true', inferSchema='true')\
      .load([file.path for file in dayfolders.collect()])\
      .createOrReplaceTempView(<temporary table name>)
    

    如果您打算将文件作为单独的数据框读取,那么您需要将每个数据框合并在一起:

    for ind, file in enumerate(dayfolders.collect()):
      if ind == 0:
        df = spark.read.format("csv")\
          .option("inferschema", "true")\
          .option("header","true")\
          .load(file.path)
      else:
        df = df.union(spark.read.format("csv")\
          .option("inferschema", "true")\
          .option("header","true")\
          .load(file.path))
    

    我不建议你这样做。就用第一种方法吧。

    【讨论】:

    • 我首先需要dataframe,因为除了将dataframe加载到SQL表之外,它还作为parquet文件sned到datalake。这就是我们首先将所有 csv 合并到一个数据帧的原因。我将在今天晚些时候尝试您的解决方案。提前致谢
    • 我找到了 5 分钟的空闲时间 :)。您的解决方案有效。谢谢
    【解决方案2】:

    您不必提供 ForLoop。您可以在加载中提供“dayfolders/*.csv”,它将直接加载所有文件并将其组合到一个数据帧中。

    f = spark.read.format("csv")\
              .option("inferschema", "true")\
              .option("header","true")\
              .load(dayfolders/*.csv")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-20
      • 2019-01-28
      • 2023-03-27
      • 2021-06-07
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 2021-05-23
      相关资源
      最近更新 更多