Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spark python读取多个csv';s到数据帧_Python_Dataframe_Databricks - Fatal编程技术网

spark python读取多个csv';s到数据帧

spark python读取多个csv';s到数据帧,python,dataframe,databricks,Python,Dataframe,Databricks,我在一个数据湖上有多个csv文件。我可以连接到datalake,甚至可以列出文件。但是我需要将这些文件放在一个数据帧中,这样我就可以将这个数据帧加载到SQL中。加载到SQL也没有问题。 问题在于,只有datalakefolder中最后一个文件的内容被读写到SQL(因此也在dataframe中)。可能是因为每次都会覆盖数据帧。但我不知道如何在每个周期向数据帧追加数据 以下是我使用的代码: for file in dayfolders.collect(): filename =

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

    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语句之后,我可以看到它在这三个文件中循环。单独处理所有文件都很好

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

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

我不建议你那样做。只需使用第一种方法。

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

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

我首先需要dataframe,因为除了将dataframe加载到SQL表之外,它还作为拼花文件加载到datalake。这就是为什么我们首先将所有csv合并到一个数据帧中。今天晚些时候我会尝试你的解决方案。提前感谢我找到了5分钟的空闲时间:)。你的解决方案有效。谢谢
f = spark.read.format("csv")\
          .option("inferschema", "true")\
          .option("header","true")\
          .load(dayfolders/*.csv")