输入Dataframe:
{
"C_1" : "A",
"C_2" : "B",
"C_3" : [
{
"ID" : "ID1",
"C3_C2" : "V1",
"C3_C3" : "V2"
},
{
"ID" : "ID2",
"C3_C2" : "V3",
"C3_C3" : "V4"
},
{
"ID" : "ID3",
"C3_C2" : "V4",
"C3_C3" : "V5"
},
..
]
}
期望输出:
{
"C_1" : "A",
"C_2" : "B",
"ID1" : {
"C3_C2" : "V2",
"C3_C3" : "V3"
},
"ID2" : {
"C3_C2" : "V2",
"C3_C3" : "V3"
},
"ID3" : {
"C3_C2" : "V4",
"C3_C3" : "V5"
},
..
}
``` `C_3` 是一个数组 `n` 结构,每个项都有一个唯一的 `ID` . 新的Dataframe将转换 `n` 中的结构 `C_3` 分为不同的列,并根据 `ID` .
我是spark&scala的新手。任何关于如何实现这一转变的想法都将非常有用。
谢谢!
2条答案
按热度按时间x759pob21#
[发布我的黑客解决方案供参考]。
@mck的答案可能是一种简洁的方法,但对于我的用例来说还不够。我的数据框有很多列,并且在上使用了所有的列
group-by
那是个昂贵的手术。在我的用例中
IDs
在C_3
是唯一且已知的值,因此这是本解决方案中的假设。我实现了如下转变:输出:
tzdcorbm2#
可以分解结构,然后按id透视: