首页 > 解决方案 > RDD滑动错误不理解

问题描述

鉴于这有效:

(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
             ^

我只是在尝试示例,而我无法真正遵循。

标签: apache-spark

解决方案


它不起作用,因为iterator RDDis not aCollection并且它的iterator方法具有不同的签名

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

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

如果要转换RDD为本地Iterator使用toLocalIterator

定义toLocalIterator: Iterator[T]

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

rdd1.toLocalIterator

但您可能想要的是RDDFunctions.sliding-在 Spark 中对 RDD 中的相邻元素进行操作


推荐阅读