我有一个Dataframe,其列名为" generationId"和其他领域。 Field" 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.在循环中,输入基于与&#34; i&#34;的匹配进行过滤。然后输入一些模型(一些内部库),通过再添加3列来转换输入。
最终我希望获得所有转换数据帧的联合,因此我拥有原始数据框的所有列以及模型为每行添加的3个附加列。我无法弄清楚如何初始化结果并在每次迭代中将结果联合起来。我提前知道结果的确切模式。所以我做了
val newSchema = ...
但我不知道如何将其传递给emptyRDD函数并构建一个空的Dataframe并在循环中使用它。
此外,如果在地图操作中有一种更有效的方法,请建议。
答案 0 :(得分:2)
你可以这样做:
(0 until getN(df))
.map(i => {
val input = df.filter($"generationId" === i)
getModel(i).transform(input)
})
.reduce(_ union _)
你不需要担心空的df