我有两个结构如下的表
表1
lang created_date
java 11-01-23
python 11-11-23
字符串
表2
lang ingested_date
scala 11-21-23
型
我想创建具有预期结果的组合表:
表3
lang created_date
java 11-01-23
python 11-11-23
scala 11-21-23
型
实际结果
lang created_date
java 11-01-23
python 11-11-23
scala 11-21-23
scala null
型
我使用下面的python pyspark代码,但它给了我额外的一行,在created_date列中有空值。
table1DF = sparkSession.read.table("Table1")
table2DF = sparkSession.read.table("Table2")
table1 = table1DF.col("lang").col("created_date")
table2 = table2DF.col("lang").col("ingested_date").alias("created_date")
merged_table = table1.union(table2)
final_table = merged_table.groupBy("lang", "created_date")
型
当我使用union合并两个表中的数据时,如何避免在其中一列中获得最后一行空值?
2条答案
按热度按时间9bfwbjaz1#
可以使用coalesce函数从两列中选择非空值
字符串
wz1wpwve2#
下面是我针对你的问题测试的一段代码,
union
函数不关心列的名称,它关心它们的编号和类型,它将数据堆叠在彼此的顶部,获取行('scala',NULL)很奇怪,因为我测试过了,它工作正常,除非你已经在table 2中有了行。字符串
即使表1
created_date
中的column 2和表2中的column 2被称为ingested_date
,union
也会堆叠数据,因为它会检查 Dataframe 的列数和每列的类型。关于你的代码,不幸的是,它是不可复制的。但是,如果你在执行
union
后仍然有一个额外的无用行,你可以做以下事情,你会很好:型
好奇和开放的讨论,我希望这有助于!