0

我不确定如何用尽可能短的句子来描述这一点,但无论如何我都会尝试。假设我在一个名为data的变量中有一个这种格式的 RDD

(a,b,c)

b 和 c 是先前 RDD 转换产生的数组。基于某些条件,我想将 RDD 转换为仅从 b 或 c 获取 1 列。我在声明临时变量来存储 rdd 时遇到问题。

val data = sc.textFile("1.txt").map(_.split(",",-1))
//var new_data:RDD= null??? what data type should i use??
if(x ==1){
    new_data = data.map{ (a,b,c) => ( b(x) ) }
}else if( x==2 ){
    new_data = data.map{ (a,b,c) => ( c(x) ) }
}
//several more if statement here similar to the two above

//need to use new_data here

如果我使用valif语句中声明 new_data ,它将超出 if 语句的范围。我尝试使用 var,但我不知道如何初始化它。我尝试使用MappedRDD 和 RDD 类型的var,但我似乎无法将映射操作的值分配给它。

4

1 回答 1

3

将 if 包装在一个函数中。呜呜呜!!对不起。函数式编程的新手。发帖前应该多想。所以代码如下:

val new_data = { 
   if(x ==1){ data.map{ (a,b,c) => ( b(x) ) }         
   else if( x==2 ){ data.map{ (a,b,c) => ( c(x) ) 
} 
于 2014-07-12T00:30:03.757 回答