Apache spark Spark和Spark JobServer避免在每次调用runJob时调用昂贵的重构对象的最佳实践(sc:SparkContext,config:config)
每次调用下面的JobServer runJob API时,我都有一个时间开销逻辑来在runJob调用中重复构造一个对象Apache spark Spark和Spark JobServer避免在每次调用runJob时调用昂贵的重构对象的最佳实践(sc:SparkContext,config:config),apache-spark,spark-jobserver,Apache Spark,Spark Jobserver,每次调用下面的JobServer runJob API时,我都有一个时间开销逻辑来在runJob调用中重复构造一个对象 runJob(sc: SparkContext, config: Config) 将对象存储在内存中的最佳实践是什么,以避免每次调用runJob API时重复构造对象,从而使每次调用runJob都可以在第一次调用期间重用存储在内存中的对象 如果我可以执行1,那么当我需要更新对象时,我还可以删除内存中的对象吗 如果我可以执行1,我可以跨集群共享对象吗 除了常规对象之外,我还要问
runJob(sc: SparkContext, config: Config)
我相信广播非常适合您的数据,而累加器则适合您的模型。我想补充一点,您可能需要研究
mapPartitions
提供的功能,它允许您在每个分区上只执行一次昂贵的初始化
这是学习火花的一个例子:
在本例中,昂贵的
HttpClient
初始化只执行一次。然后使用结果在表示为Iterable
的分区上迭代。我相信广播非常适合您的数据,而累加器适合您的模型。我想补充一点,您可能需要研究mapPartitions
提供的功能,它允许您在每个分区上只执行一次昂贵的初始化
这是学习火花的一个例子:
在本例中,昂贵的
HttpClient
初始化只执行一次。然后,您使用结果在表示为Iterable
的分区上迭代。您可以定义“常规对象和模型”的含义吗?常规对象是指任意scala对象。模型是指预测模型。你能定义一下“常规对象和模型”是什么意思吗?常规对象是指任意的scala对象。模型是指预测模型。
val contactsLists = validSigns.distinct().mapPartitions { signs = >
val mapper = createMapper()
val client = new HttpClient()
client.start() // create http request
signs.map { sign =>
createExchangeForSign(sign) // fetch responses
}.map {
case (sign, exchange) => (sign, readExchangeCallLog( mapper, exchange))
}.filter( x = > x._2 != null)
}