如何在Spark中显式实现RDD

时间:2016-03-19 20:10:07

标签: apache-spark

我需要从文件中读取大型数据集,将其转换为Spark矩阵并在矩阵上运行一些机器学习算法。我想对机器学习算法的速度进行基准测试。由于Spark RDD总是被懒惰地评估,因此很难对机器学习算法进行基准测试。当我测量运行时时,它还包括用于解析输入文件的运行时。

有没有办法强制Spark实现一些RDD?这样我可以在运行机器学习算法之前提前解析输入文件吗?

谢谢, 沓

2 个答案:

答案 0 :(得分:3)

我通常做这样的事情:

val persisted = rdd.persist(...); 

这取决于你的rdd的大小,如果它适合内存只提供内存,否则 - 内存和磁盘级别。

然后:

persisted.count();
// now you can use 'persisted', it's materialized

然后所有其他管道转换(在你的情况下为ml)

所以计数是一个动作 - 所以它实现了rdd,因为你之前已经坚持过 - 下一个阶段将从持久存储而不是从文件中获取rdd

答案 1 :(得分:0)

如果您的应用程序(ML)具有使用data1.count的多个任务,则您也可以使用共享变量和累加器(请参阅@Igor的注释部分) 请参阅此source