从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中启用了调试模式,我可以在后台看到执行的查询,并获取所有列。
答案 0 :(得分:1)
我能够重现此问题(尽管一旦您提到pom,我很确定出了什么问题,我确实花了一些时间重现它)
请注意您拥有的文档。它具有"_type": "order"
,这意味着被查询到的Elasticsearch使用的是版本 7.0.0
Elasticsearch曾经具有type
的概念,并已在版本 7.0.0中将其删除(根据此link) 。
转到浏览器,并在遇到以下具有以下功能的Elasticsearch服务器时,检查number
部分下version
字段中观察到的内容:
https://my-es-search.xyz.us-east-1.es.amazonaws.com
例如当我在浏览器中命中本地Elasticsearch实例(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>
执行此操作后,您应该能够看到地图中显示的值。
希望它有帮助,如果您认为有帮助,可以随时接受答案并投票!!