在运行pyspark工作时,会有很大的启动开销。 是否可以运行轻量级'不使用外部守护进程的工作? (主要用于测试小数据集)
答案 0 :(得分:1)
<强>更新强>
我的回答不再适用。
现在有pysparkling项目提供
Spark的RDD接口的纯Python实现。目标是消除对JVM和Hadoop的依赖。
它仍然是早期版本 - 但它允许您使用纯Python运行PySpark应用程序。但YMMV - Spark API发展迅速,而且pysparkling可能没有实现所有最新的API。
我仍然会使用完整的PySpark进行测试 - 确保我的应用程序在我的目标平台上运行 - Apache Spark。
上一个回答
不,没有办法只将Spark作为单个Python进程运行。 PySpark只是Scale代码之上的瘦API层。后者应该在JVM内部运行。
我的公司是PySpark的重要用户,我们不断对火花作业进行单元测试。在本地模式下运行Spark作业时没有那么多开销。它确实启动了JVM,但它比我们旧的Pig代码测试快了一个数量级。
如果您要运行许多任务(即许多单元测试),您可以尝试重用Spark Context - 这将减少为每个测试用例启动守护程序所花费的时间。请记住,在这种情况下,您需要在每个测试用例之后进行清理(例如,如果您的程序缓存了某些rdds,则为unpersist)。
在我们公司,我们决定为每个测试用例启动新的Spark Context - 现在让它们保持干净。至少在目前,以本地模式运行Spark对我们来说足够快。