Spark - 从空 DataFrame 开始在 for 循环中执行 Dataframes 联合

Spark - Performing union of Dataframes inside a for loop starting from empty DataFrame

我有一个数据框,其中包含一个名为 "generationId" 的列和其他字段。字段 "generationId" 取从 1 到 N 的整数值范围(N 的上限已知并且很小,在 10 到 15 之间),我想按以下方式处理 DataFrame(伪代码):

results = emptyDataFrame <=== how do I do this ?
for (i <- 0 until getN(df)) {
    val input = df.filter($"generationId" === i)
    results.union(getModel(i).transform(input))
}

此处 getN(df) 根据某些标准给出该数据框的 N。在循环中,输入根据与 "i" 的匹配进行过滤,然后馈送到某个模型(某个内部库),该模型通过向输入再添加 3 列来转换输入。

最终我想得到所有这些转换后的数据框的并集,所以我有原始数据框的所有列加上模型为每一行添加的 3 个附加列。我无法弄清楚如何初始化结果并在每次迭代中合并结果。我确实提前知道结果的确切架构。所以我做了

val newSchema = ...

但我不确定如何将其传递给 emptyRDD 函数并构建一个空的 Dataframe 并在循环中使用它。

另外,如果有更有效的内部地图操作方法,请提出建议。

你可以这样做:

(0 until getN(df))
  .map(i => {
           val input = df.filter($"generationId" === i)
           getModel(i).transform(input)
   })
  .reduce(_ union _)

这样你就不用担心空 df