联合两个具有嵌套不同模式的数据框
Posted
技术标签:
【中文标题】联合两个具有嵌套不同模式的数据框【英文标题】:union two dataframes with nested different schemas 【发布时间】:2018-11-27 01:42:10 【问题描述】:Dataframe1 是这样的
root
|-- source: string (nullable = true)
|-- results: array (nullable = true)
| |-- content: struct (containsNull = true)
| | |-- ptype: string (nullable = true)
| | |-- domain: string (nullable = true)
| | |-- verb: string (nullable = true)
| | |-- foobar: map (nullable = true)
| | | |-- key: string
| | | |-- value: string (valueContainsNull = true)
| | |-- fooId: integer (nullable = true)
|-- date: string (nullable = false)
|-- hour: string (nullable = false)
数据框 2 如下所示:
root
|-- source: string (nullable = true)
|-- results: array (nullable = true)
| |-- content: struct (containsNull = true)
| | |-- ptype: string (nullable = true)
| | |-- domain: string (nullable = true)
| | |-- verb: string (nullable = true)
| | |-- foobar: map (nullable = true)
| | | |-- key: string
| | | |-- value: string (valueContainsNull = true)
|-- date: string (nullable = false)
|-- hour: string (nullable = false)
注意区别 - 第二个数据帧中没有 fooId
。
如何将这两个数据框合并在一起?
我知道这两个模式需要相同才能联合。添加fooId
或删除fooId
的最佳方法是什么?(由于模式的结构,这不是微不足道的)进行这种联合的推荐方法是什么。
谢谢
【问题讨论】:
要使用union
,两个数据框的架构需要匹配。因此,要么删除第一个数据帧中的 fooId
列,要么将其(作为 null 或任何常量值)添加到第二个数据帧。
@Shaido 我已经编辑了这个问题。我知道它必须是一样的。
@Shaido 我想了解人们如何在不改变固有结构的情况下处理这种情况。
要将嵌套列添加到数据框 2,请参阅此处 ***.com/questions/44831789/…。添加 fooId 与所有空值,然后你可以联合两者
上面的链接是给一个结构体添加一个嵌套列。您将如何对数组执行此操作? .
运算符无法访问它
【参考方案1】:
由于您考虑了两个数据框让 DF1 和 DF2,您可以删除 DF1 中的额外列并运行两个数据框的联合
// this is to remove the extra column in the dataframe
DF1.drop("fooId")
现在两个 DF 的列数相同,因此您可以进行联合
DF1.union(DF2)
【讨论】:
这不起作用 - 因为drop
不会删除嵌套列。以上是关于联合两个具有嵌套不同模式的数据框的主要内容,如果未能解决你的问题,请参考以下文章