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