java—如何从spark中的聚合结构对象中去除“col1”别名?

f1tvaqid  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(272)

我正在尝试将json对象聚合到json列表中—动态创建用不同数量的字段创建的结构对象。每次使用以下代码段创建聚合时:

batched = dataset.select(col(asteriskChar), row_number()
                       .over(Window.orderBy(order)).alias(rowNumAlias))
                       .withColumn(batchAlias, functions.ceil(col(rowNumAlias).divide(batchSize)))
                       .groupBy(col(batchAlias))  .agg(functions.collect_list(struct(structCol)).alias(batchedColAlias));

我希望有如下对象批处理:

[
 {
      "id": 1,
      "first": "John",
      "last": "Thomas",
      "score": 88
  },
  {
      "id": 2,
      "first": "Anne",
      "last": "Jacobs",
      "score": 32
  }
]

,但我得到了以下信息:

[
  {
    "col1": {
      "id": 1,
      "first": "John",
      "last": "Thomas",
      "score": 88
    }
  },
  {
    "col1": {
      "id": 2,
      "first": "Anne",
      "last": "Jacobs",
      "score": 32
    }
  }
]

如何去掉“col1”字段并使这些json成为数组中的单个对象?先谢谢你。

dl5txlt9

dl5txlt91#

很可能你不需要 struct 在那里:

.groupBy(col(batchAlias))
.agg(functions.collect_list(structCol).alias(batchedColAlias));

相关问题