我正在使用Spark结构化流式传输来自Kafka队列的JSON数据,但我需要将JSON数据写入Elasticsearch。
但是,我无法在sparkContext
内获取ForeachWriter
以将JSON转换为RDD。它抛出了NPE。
如何在Writer中获取SparkContext
以将JSON转换为RDD?
答案 0 :(得分:2)
你做不到。 ForeachWriter
中的方法在执行程序中运行。您可以自己编写Elasticsearch接收器,也可以调用Elasticsearch的原始API来编写数据。
答案 1 :(得分:-1)
我通过在ForeachWriter
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