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