Python Pyspark:从不同的目录加载类似的拼图,并将文件夹名称作为列合并到一个数据框中

Python Pyspark:从不同的目录加载类似的拼图,并将文件夹名称作为列合并到一个数据框中,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我有几个类似文件夹结构的拼花: '/raw-files/17001/result.parquet' '/raw-files/17002/result.parquet' '/raw-files/...../result.parquet' '/raw-files/18000/result.parquet' 我想将所有拼花组合成一个数据框,同时添加一列,使用唯一的文件夹名称(17001、17002、…、18000)作为区分它们的关键。到目前为止我有 raw_files=os.listdir('raw

我有几个类似文件夹结构的拼花:

'/raw-files/17001/result.parquet'
'/raw-files/17002/result.parquet'
'/raw-files/...../result.parquet'
'/raw-files/18000/result.parquet'
我想将所有拼花组合成一个数据框,同时添加一列,使用唯一的文件夹名称(17001、17002、…、18000)作为区分它们的关键。到目前为止我有

raw_files=os.listdir('raw-files')
创建所有唯一文件夹名称的列表,然后通过循环这些目录并读取拼图来创建数据帧字典

df_dict = {}
for folder in raw_files:
    path = 'raw-files/' +folder+'/' 
    df_dict[folder] = spark.read.parquet(path +'results.parquet').withColumn('Key',lit(folder))

现在我有了一个Spark数据帧字典,其中包含了所需的键列,但我不确定如何将它们简化为单个数据帧。我知道有很多方法可以用熊猫来做,但我想坚持使用Spark框架。在Spark中也可能有一种更简单的方法来实现这一点,我只是忽略了这一点。

我没有将数据帧存储在字典中,而是使用了列表

df_dict = []
for folder in raw_files:
    path = 'raw-files/' +folder+'/' 
    df_dict.append(spark.read.parquet(path +'results.parquet').withColumn('Key',lit(folder)))
从那里,我可以使用解决方案


如果有人有更有效的方法,请告诉我

@mck,我以前见过,但它给了我一个有效的想法。我可以使用一个列表,而不是使用字典来存储数据帧,上面链接的解决方案可以工作。
df = reduce(DataFrame.unionAll, df_dict)