我有一个spark代码,其中Call方法中的代码调用memSQL数据库以从表中读取。我的代码每次打开一个新的连接对象,并在任务完成后关闭它。此调用是从Call方法内部进行的。这很好但Spark工作的执行时间变得很快。什么是更好的方法,以便减少火花代码执行时间。
谢谢。
答案 0 :(得分:1)
每个分区可以使用一个连接,如下所示:
rdd.foreachPartition {records =>
val connection = DB.createConnection()
//you can use your connection instance inside foreach
records.foreach { r=>
val externalData = connection.read(r.externaId)
//do something with your data
}
DB.save(records)
connection.close()
}
如果您使用Spark Streaming:
dstream.foreachRDD { rdd =>
rdd.foreachPartition { records =>
val connection = DB.createConnection()
//you can use your connection instance inside foreach
records.foreach { r=>
val externalData = connection.read(r.externaId)
//do something with your data
}
DB.save(records)
connection.close()
}
}
请参阅http://spark.apache.org/docs/latest/streaming-programming-guide.html#output-operations-on-dstreams