是否可以在Apache Spark中创建嵌套的RDD?

我试图在Spark中实现K-最近邻算法。 我想知道是否可以使用嵌套的RDD。 这将使我的生活更轻松。 请考虑以下代码段。

public static void main (String[] args){ //blah blah code JavaRDD temp1 = testData.map( new Function(){ public Double call(final Vector z) throws Exception{ JavaRDD temp2 = trainData.map( new Function() { public Double call(Vector vector) throws Exception { return (double) vector.length(); } } ); return (double)z.length(); } } ); } 

目前我收到这个嵌套设置的错误(我可以在这里发布完整的日志)。 它是否允许在拳头位置? 谢谢

不,这是不可能的,因为RDD的项目必须是可序列化的,并且RDD不可序列化。 这是有道理的,否则您可能会通过网络传输整个RDD,如果它包含大量数据,这是一个问题。 如果它不包含大量数据,您可能会使用数组或类似的数据。

但是,我不知道你是如何实现K最近的邻居…但要小心:如果你做的事情就像计算每一对点之间的距离那样,实际上这在数据集大小上是不可扩展的,因为它是O (N2)。

我在尝试这种事情时遇到了nullpointerexception。因为我们无法在RDD中对RDD执行操作。

Spark不支持嵌套RDD,原因是 – 执行操作或创建新的RDD spark运行时需要访问只在驱动程序机器中可用的sparkcontext对象。

因此,如果您想对嵌套的RDD进行操作,您可以在驱动程序节点上收集父RDD,然后使用数组或其他东西迭代它的项目。

注意: – RDD类是可序列化的。 请看下面。

在此处输入图像描述