elasticsearch,Scala,Apache Spark,Dataframe,elasticsearch" /> elasticsearch,Scala,Apache Spark,Dataframe,elasticsearch" />

Scala Spark数据帧向上插入到Elasticsearch

Scala Spark数据帧向上插入到Elasticsearch,scala,apache-spark,dataframe,elasticsearch,Scala,Apache Spark,Dataframe,elasticsearch,我正在使用Apache Spark DataFrame,我想将数据上传到Elasticsearch 我发现我可以像这样覆盖它们 val df = spark.read.option("header","true").csv("/mnt/data/akc_breed_info.csv") df.write .format("org.elasticsearch.spark.sql") .option("es.nodes.wan.only","true") .option("es.por

我正在使用Apache Spark DataFrame,我想将数据上传到Elasticsearch 我发现我可以像这样覆盖它们

val df = spark.read.option("header","true").csv("/mnt/data/akc_breed_info.csv")

df.write
  .format("org.elasticsearch.spark.sql")
  .option("es.nodes.wan.only","true")
  .option("es.port","443")
  .option("es.net.ssl","true")
  .option("es.nodes", esURL)
  .option("es.mapping.id", index)
  .mode("Overwrite")
  .save("index/dogs")
但到目前为止,我注意到这个命令
模式(“覆盖”)
实际上是删除所有现有的重复数据并插入新数据

有没有一种方法可以
upert
不删除并重新写入它们?因为我需要几乎实时地查询这些数据。提前感谢

尝试设置:

es.write.operation = upsert
这将执行所需的操作。您可以在中找到更多详细信息
模式(“覆盖”)
出现问题的原因是,当您覆盖整个数据帧时,它会立即删除与您的数据帧行匹配的所有数据,对我来说,整个索引似乎是空的,我知道如何实际插入它

这是我的密码

df.write
  .format("org.elasticsearch.spark.sql")
  .option("es.nodes.wan.only","true")
  .option("es.nodes.discovery", "false")
  .option("es.nodes.client.only", "false")
  .option("es.net.ssl","true")
  .option("es.mapping.id", index)
  .option("es.write.operation", "upsert")
  .option("es.nodes", esURL)
  .option("es.port", "443")
  .mode("append")
  .save(path)

请注意,您必须输入
“es.write.operation”、“upert”
模式(“append”)

谢谢您的回答。我试过了,但它对我不起作用,我需要把
.mode(“append”)
放到
索引的值是多少?@Soumendra它是ES的
映射id
,如图所示。对我来说,这是
userId