我有两个Dataframe是用 StructType spark中的方法。它们的列数都不相等。我需要把他们都团结起来。请帮忙。
StructType
lb3vh1jj1#
如果不添加虚拟列,spark dataframes是不可能的dataframeuninall就像您的sql联合,您需要有相同的列数和数据类型。。。union所有基本要求都是类型,在rdbms sql或dataframes中顺序应该相同。这意味着它们返回相同数量的列,并且相应的列具有兼容的数据类型因此,您可以创建具有相同名称/类型的虚拟列,以符合联合需求。unionall公共Dataframeunionall(Dataframe其他)返回一个新的Dataframe,其中包含此帧和另一帧中的行的并集。这相当于sql中的union all。参数:其他-(无证)退货:(无证)自:1.3.0sql示例:
可能:其中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
不可能:其中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
为了使之成为可能,您可以将虚拟列添加到表1 x(字符串类型)、y(int类型)、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也是如此。
1条答案
按热度按时间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)是相同的数据类型
案例2:
不可能:其中a(int类型)、b(int类型)、c(int类型)和p(int类型)、q(int类型)、r(int类型)、x(字符串类型)、y(int类型)、z(字符串类型)
案例3:
为了使之成为可能,您可以将虚拟列添加到表1 x(字符串类型)、y(int类型)、z(字符串类型)
在本例中,我添加了虚拟列“dasarathy”作为x,2作为y,“dr”作为z
Dataframe也是如此。
结论:如果确实需要,您可以向dataframe添加虚拟列(使用withcolumn)以使dataframe1与所有dataframe2合并