我们如何使用spark中的dataframes(由structtype方法创建)合并所有列数不同的两个表?

fdbelqdn  于 2021-06-10  发布在  Hbase
关注(0)|答案(1)|浏览(457)

我有两个Dataframe是用 StructType spark中的方法。它们的列数都不相等。我需要把他们都团结起来。请帮忙。

lb3vh1jj

lb3vh1jj1#

如果不添加虚拟列,spark dataframes是不可能的
dataframeuninall就像您的sql联合,您需要有相同的列数和数据类型。。。
union所有基本要求都是类型,在rdbms sql或dataframes中顺序应该相同。
这意味着它们返回相同数量的列,并且相应的列具有兼容的数据类型
因此,您可以创建具有相同名称/类型的虚拟列,以符合联合需求。
unionall公共Dataframeunionall(Dataframe其他)
返回一个新的Dataframe,其中包含此帧和另一帧中的行的并集。这相当于sql中的union all。
参数:
其他-(无证)
退货:
(无证)
自:
1.3.0
sql示例:

案例1:

可能:其中a(int datatype)、b(int datatype)、c(int datatype)和x(int datatype)、y(int datatype)、z(int datatype)是相同的数据类型

select a, b, c from table1 
unionall
select x,y,z from table2

案例2:

不可能:其中a(int类型)、b(int类型)、c(int类型)和p(int类型)、q(int类型)、r(int类型)、x(字符串类型)、y(int类型)、z(字符串类型)

select a, b, c from table1 
 unionall
select p, q,r, x,y,z from table2

案例3:

为了使之成为可能,您可以将虚拟列添加到表1 x(字符串类型)、y(int类型)、z(字符串类型)

在本例中,我添加了虚拟列“dasarathy”作为x,2作为y,“dr”作为z

select a, b, c, "dasarathy" as x, 2 as y, "dr" as z from table1 
     unionall
    select p, q,r, x,y,z from table2

Dataframe也是如此。

结论:如果确实需要,您可以向dataframe添加虚拟列(使用withcolumn)以使dataframe1与所有dataframe2合并

相关问题