RDD滑动错误不明白

时间:2018-05-22 19:14:57

标签: apache-spark

鉴于这是有效的:

(1 to 5).iterator.sliding(3).toList

那为什么这不起作用?

val rdd1 = sc.parallelize(List(1,2,3,4,5,6,7,8,9,10), 3)
val z = rdd1.iterator.sliding(3).toList 

我收到以下错误并尝试应用修复,但这也不起作用!

notebook:3: error: missing argument list for method iterator in class RDD
Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing `iterator _` or 
`iterator(_,_)` instead of `iterator`.
val z = rdd1.iterator.sliding(3).toList
             ^

我只是在尝试一些例子而且我无法真正遵循。

1 个答案:

答案 0 :(得分:0)

它不起作用,因为iterator RDD不是Collection及其iterator方法has different signature

  

final def iterator(split: Partition, context: TaskContext): Iterator[T]

     

此RDD的内部方法;将从缓存中读取(如果适用),或以其他方式计算它。用户不应直接调用它,但可用于RDD自定义子类的实现者。

如果您想将RDD转换为本地Iterator,请使用toLocalIterator

  

def toLocalIterator: Iterator[T]

     

返回包含此RDD中所有元素的迭代器。

rdd1.toLocalIterator

但你可能想要的是RDDFunctions.sliding - Operate on neighbor elements in RDD in Spark