【问题标题】:Query Elastic search from spark returns empty Map for values从 spark 查询弹性搜索返回空 Map 的值
【发布时间】:2019-05-20 08:52:03
【问题描述】:

从 Spark 查询弹性搜索时,仅获取 _id 值,而不获取任何值。

在云中运行的弹性搜索实例。尝试从我的 Windows 笔记本电脑上运行的 Spark 查询

    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())

从 Kibana 查询时,文档如下所示:

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

我关心的是为什么元组 Map 是空的,只有 Map()。如何获取我的文档? 我什至在 Java 中尝试了相同的代码,结果完全相同,一个 Empty Map。但是,我确实在 Java 中启用了调试模式,我可以看到在后台执行的查询,获取所有列。

【问题讨论】:

  • 你使用的是什么版本的elasticsearchspark!,你能补充一下吗?
  • 在我看来,您的字段 orderValue"1000" 而不是 1000。当我尝试使用您的代码将其从本地弹性读取到 Spark 时,我不断收到NumberFormatException(Spark 2.4.0 ES 6.5.4 Scala 2.11.8)。你能试试这个,让我知道你是否有运气val myRdd = spark.sparkContext.esRDD("my_order_index/order", "?q=*", Map[String, String]("es.read.field.include"-&gt;"name"))。如果运行,您可能可以将name 替换为name, orderValue 并查看它是否也有效。让我知道你的观察结果。
  • 感谢@kamal 我刚刚尝试通过传递一个附加参数来仅获取所需的列,但它仍然没有获取任何结果。返回相同的空 Map()。我还从 POM 添加了我的依赖项。

标签: scala apache-spark elasticsearch


【解决方案1】:

我能够重现这个问题(虽然一旦你提到了你的 pom,我很确定出了什么问题,我确实花了时间重现它)

注意您拥有的文档。它有"_type": "order",这意味着查询到的 Elasticsearch 使用的是 7.0.0

之前的版本

7.0.0 之前的 Elasticsearch 曾经有一个 type 的概念,他们在 7.0.0 版本中已将其删除(根据此 link) .

转到浏览器并检查您在version 部分下的字段number 中观察到的内容,当您点击下面的弹性搜索服务器时:

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>

执行此操作后,您应该能够看到地图中出现的值。

希望它有帮助,如果您认为它有帮助,请随时接受答案并点赞!!

【讨论】:

  • 完美的卡马尔先生。更改版本就可以了。非常感谢您快速准确的解决方案。我确实赞成,但这只是我关于stackoverflow的第二个问题,没有足够的声誉。对不起,谢谢。
  • 哈哈!!尽可能回来并投票/接受! ;) 很高兴我能帮助你!!
猜你喜欢
  • 2019-07-20
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多