来自DynamoDB Json的Spark Unnesting嵌套模式



我正在处理类似于以下内容的DynamoDB JSON:

{ 
"name" : {"S" : "John"},
"birthday": {
"M" : {
"month" : {"N": 1},
"year" : {"N": 2000},
"day" : {"N": 2} 
}
}
}

当我在spark 中读到这篇文章时

val df = spark.read.json("s3://path")

我得到了一个复杂的模式:

name : structType ( S : String),
birthday: structType (
M : StructType (
month : structType (N : int),
year : structType (N : int),
day : structType (N : int),
)
)

相反,我想将模式更改为类似的模式

name : String
birthday : structType (
month : int
year : int
day : int
)

有办法做到这一点吗?

事实上,我的模式比这个例子大得多,有许多嵌套很深的结构。我还想知道是否存在动态的";归一化";架构。

.selectExpr("name", "birthday.M as birthday")

或者你甚至可以把它完全压平到根级别的

.selectExpr("name", "birthday.M.*")

我能够使用named_struct函数:

df.selectExpr("""
named_struct (
'name', name.S,
'birthday', named_struct(
'month', birthday.M.month.N as decimal,
'year', birthday.M.year.N as decimal,
'day', birthday.M.day.N as decimal,
)
) as items
""")

这对我来说效果很好。

相关内容

  • 没有找到相关文章

最新更新