Spark-在从空DataFrame开始的for循环中执行数据帧的并集



我有一个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

相关内容

  • 没有找到相关文章

最新更新