Python 从Spark中具有不同标题的多个csv文件创建一个数据帧

Python 从Spark中具有不同标题的多个csv文件创建一个数据帧,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,在Spark中,我想使用Pyspark创建一个数据帧(其中路径实际上是S3中的一个文件夹),其中包含多个csv文件,具有公共列和不同列。 更简单地说,我只想从多个具有不同头的csv文件中获得一个数据帧 我可以有一个标题为“原始id,标题,文明”的文件,还有一个标题为“原始id,名字,文明”的文件 这是我在python 3中的代码: df = spark.read.load( s3_bucket + 'data/contacts/normalized' + '/*/*/*/*',

在Spark中,我想使用Pyspark创建一个数据帧(其中路径实际上是S3中的一个文件夹),其中包含多个csv文件,具有公共列和不同列。 更简单地说,我只想从多个具有不同头的csv文件中获得一个数据帧

我可以有一个标题为“原始id,标题,文明”的文件,还有一个标题为“原始id,名字,文明”的文件

这是我在python 3中的代码:

df = spark.read.load(
    s3_bucket + 'data/contacts/normalized' + '/*/*/*/*',
    format = 'csv',
    delimiter = '|',
    encoding = 'utf-8',
    header = 'true',
    quote = ''
)
这是文件_1.csv的一个示例:

|raw_id|title|civility|
|1     |M    |male    |
以及file2.csv的一个示例:

|raw_id|first_name|civility|
|2     |Tom       |male    |
我在数据帧中预期的结果是:

|raw_id|first_name|title|civility|
|1     |          |M    |male    |
|2     |Tom       |     |male    |
但是,发生的事情是,我有所有的联合列,但数据不在第一个文件之后的正确位置。 你知道怎么做吗


非常感谢您的帮助。

您需要将它们加载到不同的数据帧中,并在原始id列中将它们连接在一起

这不是我想要的,因为我可以有数千个文件,它们可以有公共列,所以我将有重复的列。在几百个文件夹中为每个文件创建一个数据帧是不可能的。我想不出一个好方法来做到这一点。只有当所有文件的架构相同时,才能一次加载整个文件夹和其中的所有文件。否则,数据将位于错误的列中。您可以预处理文件,使模式完全相同,也可以手动将每个文件连接在一起。这是我看到的两个选择。你是对的,这就是我所做的。我安排我的数据处理,使所有文件最终都具有相同的模式。我能够在一个数据帧中加载它。再次感谢你的帮助。