Spark Streaming:将数据帧写入ElasticSearch

时间:2018-03-05 16:50:53

标签: apache-spark elasticsearch pyspark spark-streaming pyspark-sql

我使用以下代码从python(pyspark)应用程序向elasticsearch写入一个流。

Model

如果我将结果写入控制台,它工作正常,如果我写入ES - 不是在流模式下,它可以正常工作。这是我以前写给ES的代码:

#Streaming code
query = df.writeStream \
.outputMode("append") \
.format("org.elasticsearch.spark.sql") \
.option("checkpointLocation", "/tmp/") \
.option("es.resource", "logs/raw") \
.option("es.nodes", "localhost") \
.start()

query.awaitTermination()

问题是,我无法调试它,代码正在运行,但没有任何内容写入ES(在流模式下)。

谢谢,

3 个答案:

答案 0 :(得分:1)

最终确实对我有用,问题是技术问题(需要vpn)

query = df.writeStream \
.outputMode("append") \
.queryName("writing_to_es") \
.format("org.elasticsearch.spark.sql") \
.option("checkpointLocation", "/tmp/") \
.option("es.resource", "index/type") \
.option("es.nodes", "localhost") \
.start()

query.awaitTermination()

答案 1 :(得分:1)

代码:

val stream = df
      .writeStream
      .option("checkpointLocation", checkPointDir)
      .format("es")
      .start("realtime/data")

SBT依赖关系:

libraryDependencies += "org.elasticsearch" %% "elasticsearch-spark-20" % "6.2.4"

答案 2 :(得分:0)

您无法将流式输出写入elasticsearch sink,您可以写入kafka并通过logstash加载到elasticsearch中