我在scala中调用一个函数,它输出RDD[(Long,Long,Double)]
。
def helperfunction(): RDD[(Long, Long, Double)]
我在代码的另一部分循环调用此函数,我想合并所有生成的RDD。调用该函数的循环看起来像这样
for (i <- 1 to n){
val tOp = helperfunction()
// merge the generated tOp
}
我想要做的是类似于StringBuilder在您想要合并字符串时在Java中为您做的事情。我已经研究了合并RDD的技术,这些技术主要指向使用像这样的联合函数
RDD1.union(RDD2)
但是这需要在结合之前生成两个RDD。我虽然初始化一个var RDD1来累积for循环之外的结果,但我不知道如何初始化[(Long,Long,Double)]
类型的空白RDD。另外我开始使用spark,所以我甚至不确定这是否是解决此问题的最优雅的方法。
答案 0 :(得分:4)
您可以使用函数式编程范例来实现您想要的目标,而不是使用变量:
val rdd = (1 to n).map(x => helperFunction()).reduce(_ union _)
此外,如果您仍需要创建一个空的RDD,可以使用以下方法执行:
val empty = sc.emptyRDD[(long, long, String)]
答案 1 :(得分:2)
您认为这可能不是执行此操作的最佳方式,但我们需要有关您在每次调用辅助函数时生成新RDD所要完成的内容的更多信息。
您可以在循环之前定义1个RDD并为其分配var然后通过循环运行它。这是一个例子:
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIViewController *presentingViewController = picker.presentingViewController;
ImagePreviewController *ipc = [self.storyboard instantiateViewControllerWithIdentifier:@"ImagePreviewController"];
UIImage * image = [info valueForKey:UIImagePickerControllerOriginalImage];
ipc.selectedImage = image;
[presentingViewController dismissViewControllerAnimated:YES completion:^(BOOL animated){
[presentingViewController presentViewController:ipc animated:YES completion:nil];
}];
}