如何批量从Elastic Search Index读取批量数据?

时间:2019-07-18 08:10:23

标签: mongodb scala apache-spark elasticsearch batch-processing

我正在尝试从具有20亿条记录的弹性搜索索引中读取数据。我正在尝试将获取的数据写入Mongo DB。尽管我的代码可以正常工作,但我想知道如何分批执行相同的操作,例如100万条记录。

     val spark = SparkSession
       .builder()
       .appName("ESToMongoDataUpload")
       .config("es.nodes", Config.ES_NODES)
       .config("es.net.http.auth.user", Config.ES_NET_HTTP_AUTH_USER)
       .config("es.net.http.auth.pass", Config.ES_NET_HTTP_AUTH_PASS)
       .config("es.net.ssl", Config.ES_NET_SSL)
       .config("es.nodes.wan.only", Config.ES_NODES_WAN_ONLY)
       .config("es.read.field.as.array.include", esConfig)
       .config("es.read.metadata", true)
       .config("spark.es.mapping.date.rich", false)
       .getOrCreate()


    import spark.implicits._
    val df = spark.read
      .format("org.elasticsearch.spark.sql")
      .option("query", esQuery)
      .option("pushdown", "true")
      .option("scroll.size", 10000)
      .load(Config.ES_RESOURCE)
      .withColumn("_id", $"_metadata".getItem("_id"))
      .drop("_metadata")

    df.write
      .format("com.mongodb.spark.sql.DefaultSource")
      .mode("append")
      .option("spark.mongodb.output.uri", mongoURI)
      .save()

我想从弹性搜索中批量读取100万个数据并将其写入Mongo DB。

0 个答案:

没有答案