申请循环时过滤器中的Spark Scala错误

时间:2017-09-20 02:19:26

标签: scala apache-spark

[error]  found   : Unit
[error]  required: Boolean
[error]  val value = values.split( " " ).filter(x => ( for(y <- x) { if(y!=""){ y}}) )

我的输入RDD就像

1 : 11111,22222
2 : 22224 4747

val lines1 = input2.map( line => line.split(":") )

val l1 = lines1.flatMap( arr => {
val key = arr( 0 )
val values = arr( 1 )
val value = values.split( " " ).filter(x => ( for(y <- x) { if(y!=""){ y}}) )

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

filter方法需要boolean 返回类型检查条件,但您的filter方法似乎没有返回任何内容,因为for循环只是创建value变量而不返回{em> scala 假设为for的{​​{1}}循环末尾的任何内容。

根据我对您的问题的理解,您正尝试unit来自第二个filter数字的empty值。因此,如果我的理解是正确的,那么您可以使用以下逻辑

array

答案 1 :(得分:0)

for将返回一个单位,因为它没有固有的输出。也许你想要一个for-comprehension,但你需要yield结果。虽然那时输出将是Seq而不是预期的Boolean。我猜你想要将你的值过滤到只有那些有价值的值。在不知道类型的情况下,你可以通过filter(x=>x!="")使用过滤器,或者通过flatMap(x=>for{y<-x; y!=""}yield y)使用flatMap,但我们现在需要更多信息来获得完整的答案。