Scala 使用Spark将多个文件中的列转换为单个文件

Scala 使用Spark将多个文件中的列转换为单个文件,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我正在尝试将文件夹中多个csv文件中的数据加载到单个csv文件中。所有文件将具有不同的架构,但将具有一个公共主键 文件的示例结构如下 文件1:PK,Col1,Col2,Col3 文件2:PK,ColD,ColA,ColB,ColC 文件3:PK、A、B、C 最终的文件结构应该是这样的 PK,Col1,Col3,A,ColD,C,ColC 最后,文件将以拼花或增量格式保存 请就如何使用Spark、Scala解决此问题提出建议 添加一些示例文件内容以便更好地理解 File1 emp|u id | e

我正在尝试将文件夹中多个csv文件中的数据加载到单个csv文件中。所有文件将具有不同的架构,但将具有一个公共主键

文件的示例结构如下

文件1:PK,Col1,Col2,Col3

文件2:PK,ColD,ColA,ColB,ColC

文件3:PK、A、B、C

最终的文件结构应该是这样的

PK,Col1,Col3,A,ColD,C,ColC

最后,文件将以拼花或增量格式保存

请就如何使用Spark、Scala解决此问题提出建议

添加一些示例文件内容以便更好地理解

File1

emp|u id | emp|u name | job|u name | dep|u id

68319 |凯琳|总统| 1001

66928 |火焰|经理| 3001

67832 |克莱尔|经理| 1001

65646 |乔纳斯|经理| 2001

67858 | SCARLET |分析师| 2001

文件2

emp|U id |经理|id |雇用日期|

68319 | | 1991-11-18

66928 | 68319 | 1991-05-01

67832 | 68319 | 1991-06-09

65646 | 68319 | 1991-04-02

67858 | 65646 | 1997-04-19

File3

emp_id |工资

68319 | 6000.00

66928 | 2750.00

67832 | 2550.00

65646 | 2957.00

67858 | 3100.00

最终结果

emp|u id | emp|u name |职务|姓名|经理| id |雇佣|日期|工资|部门|id

68319 |凯琳|总统| 1991-11-18 | 6000.00 | 1001

66928火焰经理68319 1991-05-01 2750.00 3001

67832 |克莱尔|经理| 68319 | 1991-06-09 | 2550.00 | 1001

65646乔纳斯经理68319 1991-04-02 2957.00 2001

67858 | SCARLET |分析师| 65646 | 1997-04-19 | 3100.00 | 2001

  • 一次性读取所有文件
  • 仅选择要添加到新DF中的列

  • 感谢QuickSilver的快速响应。但是dataframes总是从具有最大列数的文件中获取列名。无法在附加文件时从文件中获取列。
    val columns = List("PK","Col1","Col3","A","ColD","C","ColC")
    val newDF = spark.read.csv("File1","File2","File3").select(columns.map(col):_*)
    newDf.write.parquet("/parquet.file")