有两个DataFrame集,一个是“Training set”,另一个是“Test set”。我想要做的是通过使用“训练集加上一行测试集”迭代一些算法(让我们调用AAA,这需要RDD输入格式),按照下面的步骤。
实际上,在spark手册中,我已经检查过spark中的RDD和DataFrame是不可变的,所以不可能使用
Testset.map( x => AAA(Trainset.union(x)) )
另外,我尝试使用
Testset.map( x => AAA(Trainset.union(Array(x.get(0).toString.toDouble, x.get(1).toString.toDouble, ... x.get(19).toString.toDouble))
但是,它没有工作:(。有没有任何解决方案可以实现上述步骤?如果你对这个问题有个好主意,请帮助我。
//修改和添加条件
由于耗时的问题,我需要使用并行计算。因此,我无法使用'for loop'。感谢。
答案 0 :(得分:0)
不确定这是多么好的想法,但是如何:
1)在训练数据框上创建一个名为helper的新列,其值为-1
2)在测试数据帧上创建一个名为helper的新列,如下所示:
test.withColumn("helper", monotonically_increasing_id())
3)将2)的输出写入磁盘以确保id永不改变
4)联盟1)3)读回来,然后缓存/持久/写入磁盘并在
中读回5)编写一个循环,过滤联合数据帧并执行逻辑:
val data = unioned.filter($"helper" === lit(-1) || $"helper" === lit(n))
val result = logic(data)
其中n是您循环的值,从第0行开始,第一行测试