我想要合并两个json文件。
他们看起来像这样:
元素:
{
"id" : 1,
"style": {
"availableColors": [1,3,5,8]
"material" : "Iron"
.
.
.
}
.
.
.
}
颜色
{
"colorId" : 1,
"definition": {
"R": 13,
"G" : 23,
"B" : 4
}
"tags": ["...", "..."]
.
.
.
}
我已经在DF中转换了每个人,我按照以下方式加入他们:
val joined = elemDF.join(colorDF, $"style.id".cast("string").contains($"colorId"))
但在这种情况下,每个id都有与colorIds一样多的条目。
我怎样才能"分组"数组中的颜色,最后就像为每个元素添加一个颜色结构数组?
也许使用udf而不是加入数据帧?
我想避免使用类来表示行,因为json可以有很多字段和级别,我现在不应该关心。
答案 0 :(得分:1)
终于得到了解决方案。如果有人遇到同样的问题,我会添加它。
def toColumns(colNames: Array[String]) = {
colNames.map(x => col(x))
}
val joined = elemDF.join(colorDF, $"style.id".cast("string").contains($"colorId"))
.withColumn("color",
struct(toColumns(colorDF.schema.fieldNames): _*)
joined.groupBy(toColumns(elemDF.schema.fieldNames): _*)
.agg(collect_list($"color").as("colors"))