Query Elastic search от spark возвращает пустую карту значений - PullRequest
1 голос
/ 19 мая 2019

При запросе эластичного поиска из Spark выбирается только значение _id, но не любые значения.

Экземпляр эластичного поиска, работающий в облаке. Попытка запроса от Spark, работающего на моем ноутбуке с Windows

    val sparkConf = new SparkConf()
      .setMaster("local[*]")
      .setAppName("ElasticSearch Query")
      .set("es.nodes", "https://my-es-search.xyz.us-east-1.es.amazonaws.com")
      .set("es.port", "443")
      .set("es.nodes.wan.only", "true")

    val spark = SparkSession.builder.config(sparkConf).getOrCreate()      
    val myRdd = spark.sparkContext.esRDD("my_order_index", "?q=*")
    myRdd.take(10).foreach(println)

Зависимости Maven:

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.12</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch-hadoop</artifactId>
            <version>7.0.0</version>
        </dependency>

Фактический результат:

(order-2019-05+2+1301,Map())
(order-2019-05+5+0,Map())
(order-2019-05+1+1283,Map())
(order-2019-05+1+1286,Map())
(order-2019-05+1+1285,Map())
(order-2019-05+3+1359,Map())
(order-2019-05+0+1236,Map())
(order-2019-05+0+1235,Map())
(order-2019-05+2+1297,Map())
(order-2019-05+6+2,Map())

При запросе из Кибаны вот как выглядит документ:

        "_index" : "my_order_index",
        "_type" : "order",
        "_id" : "order-2019-05+2+1301",
        "_score" : 1.0,
        "_source" : {
                   "name":"John",
                   "orderValue":"1000.00" 
        }

Меня беспокоит, почему карта кортежей пуста, только карта (). как я могу получить свой документ? Я даже попробовал тот же код в Java, результат точно такой же, Пустая карта. Тем не менее, я включил режим отладки в Java, я могу видеть запросы, выполняемые за сценой, выбирая все столбцы.

1 Ответ

1 голос
/ 20 мая 2019

Мне удалось воспроизвести эту проблему (хотя, упомянув о помпе, я был совершенно уверен, что не так, я потратил время на ее воспроизведение)

Обратите внимание на документ, который у вас есть. Он имеет "_type": "order", что означает, что Elasticsearch, который запрашивается , использует версию, предшествующую 7.0.0

Elasticsearch до 7.0.0 раньше имел концепцию type, которую они удалили (согласно этой ссылке ) в версии 7.0.0 .

Перейдите в браузер и проверьте, что вы видите в поле number в разделе version, когда вы попадаете на сервер, который у вас ниже:

https://my -es-search.xyz.us-east-1.es.amazonaws.com

Например, когда я нажимаю на свой локальный экземпляр эластичного поиска (http://localhost:9200) в браузере, я наблюдаю следующее:

{
  "name" : "jqzqX5D",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "11YmK-ChT4OuXW8Mb9t9tw",
  "version" : {
    "number" : "6.5.4",                    <------- Notice this. That is Elasticsearch version that is being used. 
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "d2ef93d",
    "build_date" : "2018-12-17T21:17:40.758843Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Вам необходимо обновить pom-файл, чтобы использовать ту же версию elasticsearch-hadoop

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.11.12</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch-hadoop</artifactId>
        <version>6.5.4</version>                     <------- Change this. 
    </dependency>

Вы сможете увидеть значения, отображаемые на вашей карте, как только вы это сделаете.

Надеюсь, это поможет, и не стесняйтесь принять ответ и заявить о себе, если вы думаете, что это помогло !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...