在Apache Spark代码的调用方法中使用memSQL Connection对象的正确方法是什么

时间:2016-04-25 10:09:38

标签: apache-spark spark-streaming memsql

我有一个spark代码,其中Call方法中的代码调用memSQL数据库以从表中读取。我的代码每次打开一个新的连接对象,并在任务完成后关闭它。此调用是从Call方法内部进行的。这很好但Spark工作的执行时间变得很快。什么是更好的方法,以便减少火花代码执行时间。

谢谢。

1 个答案:

答案 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