我有几个类组成的spark应用程序。我在我的主类中创建JavaSparkContext并使用它从hdfs(sc.textFile)获取数据。然后将此数据传递给正在处理它的另一个对象。在处理过程中,我需要再次使用上下文从List生成RDD。我不想在API中再添加一个参数来将上下文对象从主类传递给另一个。还有其他选项,比如使用静态方法获取现有上下文吗?
P.S。在网上搜索没有帮助。
答案 0 :(得分:3)
您可以通过为类构造函数提供配置来创建SparkContext
实例。因此,如果要在程序的另一部分中使用该实例,则需要以某种方式传递相同的引用。
将上下文作为参数传递给作业是一个有效的选项,这将是我的首选方式。确保将该参数设置为瞬态,以避免被闭包“抓住”。
您还可以使用经典的“Singleton”模式,使用封装上下文创建的类,并提供静态方法来获取单例引用。
在所有情况下,您都需要提供适合您特定需求的ctx共享机制。