我们如何在 Spark 中使用 Dataframes(由 structtype 方法创建)合并具有不同列数的 2 个表?
Posted
技术标签:
【中文标题】我们如何在 Spark 中使用 Dataframes(由 structtype 方法创建)合并具有不同列数的 2 个表?【英文标题】:How can we UnionAll 2 tables that have different number of columns using Dataframes (created by structtype method) in Spark? 【发布时间】:2016-11-15 09:34:37 【问题描述】:我有 2 个使用 Spark 中的 StructType
方法创建的数据帧。
它们都有不相等的列数。
需要联合他们。请协助。
【问题讨论】:
【参考方案1】:除非您添加虚拟列,否则使用 Spark Dataframes 是不可能的
DataFrame UninonAll 就像您需要的所有 SQL 联合 具有相同数量的列和相同的数据类型...
union all 基本要求是类型,RDBMS sql 或 DataFrames 中的顺序应相同。
这意味着它们返回相同数量的列并且对应的列具有兼容的数据类型
因此您可以创建相同名称/类型的虚拟列以符合联合要求。
unionAll public DataFrame unionAll(DataFrame other)
返回一个新的 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:
** 不可能 : where a(int type),b(int type),c(int type) & p(int type),q(int type),r(int type), x(String type) , y(int type),z(String type) **
select a, b, c from table1
unionall
select p, q,r, x,y,z from table2
案例 3:
为使您可以在表 1 中添加虚拟列 x(String 类型), y(int 类型),z(String 类型)
在这种情况下,我将虚拟列“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
在数据帧的情况下也是如此。
结论:如果绝对需要,您可以将虚拟列(使用withColumn
)添加到数据帧以使数据帧1 unionall
数据帧2
【讨论】:
我的回答有用吗? 没有。答案更笼统。 我还没有看到你的消息,因为你还没有添加@myname,所以请从现在开始。我添加了 sql 示例以供您理解,这些示例在 Dataframes 中也类似。希望你现在明白了。 另外,如果您需要更多示例,您需要评论和交流。这是个好习惯。以便用户回复更多信息。如果您保持安静,用户将没有动力回答您的问题。如果您有任何问题,请随时提出问题。 感谢@Ram 的解释以上是关于我们如何在 Spark 中使用 Dataframes(由 structtype 方法创建)合并具有不同列数的 2 个表?的主要内容,如果未能解决你的问题,请参考以下文章
Spark使用DataFrame读取复杂JSON中的嵌套数组
如何在 Spark 中将两个 DataFrame 与组合列连接起来?