Spark结构化流式传输ForeachWriter无法获得sparkContext

时间:2017-02-22 14:41:12

标签: scala apache-spark spark-structured-streaming elasticsearch-spark

我正在使用Spark结构化流式传输来自Kafka队列的JSON数据,但我需要将JSON数据写入Elasticsearch。

但是,我无法在sparkContext内获取ForeachWriter以将JSON转换为RDD。它抛出了NPE。

如何在Writer中获取SparkContext以将JSON转换为RDD?

2 个答案:

答案 0 :(得分:2)

你做不到。 ForeachWriter中的方法在执行程序中运行。您可以自己编写Elasticsearch接收器,也可以调用Elasticsearch的原始API来编写数据。

答案 1 :(得分:-1)

我通过在ForeachWriter

中获取SparkContext的实例来解决问题
val writer = new ForeachWriter[CustomerData] {

  override def open(partitionId: Long, version: Long) = true
  override def process(value: CustomerData) = {
        val spark = SparkSession
        .builder()
       .getOrCreate()    //this works
       ...
  }
  override def close(errorOrNull: Throwable) = {}
}

PS:这可能是在创建一个新的SparkSession