是否可以在 Apache Spark 中创建嵌套 RDD?
Is it possible to create nested RDDs in Apache Spark?
我正在尝试在 Spark 中实现 K 最近邻算法。我想知道是否可以使用嵌套的 RDD。这会让我的生活轻松很多。考虑以下代码片段。
public static void main (String[] args){
//blah blah code
JavaRDD<Double> temp1 = testData.map(
new Function<Vector,Double>(){
public Double call(final Vector z) throws Exception{
JavaRDD<Double> temp2 = trainData.map(
new Function<Vector, Double>() {
public Double call(Vector vector) throws Exception {
return (double) vector.length();
}
}
);
return (double)z.length();
}
}
);
}
目前我在使用此嵌套设置时遇到错误(我可以在此处 post 获取完整日志)。拳头处允许吗?谢谢
不,这是不可能的,因为RDD的项必须是可序列化的,而RDD是不可序列化的。这是有道理的,否则您可能会通过网络传输整个 RDD,如果它包含大量数据,这将是一个问题。如果它不包含大量数据,您可能也应该使用数组或类似的东西。
但是,我不知道你是如何实现 K 最近邻的……但要小心:如果你做一些事情,比如计算每对点之间的距离,这实际上在数据集中是不可扩展的大小,因为它是 O(n2).
我 运行 在尝试这样的事情时陷入空指针异常 sort.As 我们无法在 RDD 中对 RDD 执行操作。
Spark 不支持 RDD 的嵌套,原因是 - 执行操作或创建新的 RDD spark 运行时需要访问仅在驱动程序机器中可用的 sparkcontext 对象。
因此,如果您想对嵌套 RDD 进行操作,您可以在驱动程序节点上收集父 RDD,然后使用数组或其他方式迭代它的项。
注意:- RDD class 是可序列化的。请看下面。
我正在尝试在 Spark 中实现 K 最近邻算法。我想知道是否可以使用嵌套的 RDD。这会让我的生活轻松很多。考虑以下代码片段。
public static void main (String[] args){
//blah blah code
JavaRDD<Double> temp1 = testData.map(
new Function<Vector,Double>(){
public Double call(final Vector z) throws Exception{
JavaRDD<Double> temp2 = trainData.map(
new Function<Vector, Double>() {
public Double call(Vector vector) throws Exception {
return (double) vector.length();
}
}
);
return (double)z.length();
}
}
);
}
目前我在使用此嵌套设置时遇到错误(我可以在此处 post 获取完整日志)。拳头处允许吗?谢谢
不,这是不可能的,因为RDD的项必须是可序列化的,而RDD是不可序列化的。这是有道理的,否则您可能会通过网络传输整个 RDD,如果它包含大量数据,这将是一个问题。如果它不包含大量数据,您可能也应该使用数组或类似的东西。
但是,我不知道你是如何实现 K 最近邻的……但要小心:如果你做一些事情,比如计算每对点之间的距离,这实际上在数据集中是不可扩展的大小,因为它是 O(n2).
我 运行 在尝试这样的事情时陷入空指针异常 sort.As 我们无法在 RDD 中对 RDD 执行操作。
Spark 不支持 RDD 的嵌套,原因是 - 执行操作或创建新的 RDD spark 运行时需要访问仅在驱动程序机器中可用的 sparkcontext 对象。
因此,如果您想对嵌套 RDD 进行操作,您可以在驱动程序节点上收集父 RDD,然后使用数组或其他方式迭代它的项。
注意:- RDD class 是可序列化的。请看下面。