Spark SQL Insert Select 带有列列表?

Aci*_*der 4 apache-spark

据我阅读 Spark/Hive SQL 文档,Spark 2.4 及更早版本不支持使用列列表插入表。

我有一个源表和一个目标表,它们具有不同的列数和不同的列名称,我需要复制它们。

这是否意味着我必须在 PySpark 中编写代码才能完成这项工作,因为 Spark SQL 将无法做到这一点?

例子:

input_table( cola, colb, colc, cold, cole)

output_table(fieldx, fieldy, fieldz)
Run Code Online (Sandbox Code Playgroud)

在 SQL 中(假设 RDBMS,例如 MS-SQL、PostgreSQL 等),我将执行以下操作:

insert into output_table(fieldx, fieldy, fieldz) select cola, colb, colc from input_table
Run Code Online (Sandbox Code Playgroud)

Spark SQL 不允许这样做,它不接受 Insert SQL 语句中的列列表。

问题:如何在 PySpark 或(理想情况下)Spark-SQL(我使用 Spark 2.4)中以最少的代码和最高的性能完成此任务?

谢谢

Vam*_*ala 7

output指定不会从input_tablenull复制的列selectinsert(如果允许的话,当只有一组列(而不是全部)使用列列表进行编辑时,就会发生这种情况)

insert into output_table
select cola, colb, colc,null as other1,--..specify non-copied column values as null 
from input_table
Run Code Online (Sandbox Code Playgroud)