pyspark es.query仅在默认情况下工作

snz8szmq  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(413)

在pypspark中,获取es返回的数据的唯一方法是保留es.query的默认值。为什么会这样?

es_query = {"match" : {"key" : "value"}}
es_conf = {"es.nodes" : "localhost", "es.resource" : "index/type", "es.query" : json.dumps(es_query)}
rdd = sc.newAPIHadoopRDD(inputFormatClass="org.elasticsearch.hadoop.mr.EsInputFormat",keyClass="org.apache.hadoop.io.NullWritable",valueClass="org.elasticsearch.hadoop.mr.LinkedMapWritable", conf=es_conf)
...
rdd.count()
0
rdd.first()
ValueError: RDD is empty

然而,这个查询(默认)似乎是有效的

es_query = {"match_all" : {}}
...
rdd.first()
(u'2017-01-01 23:59:59)
  • 我已经通过直接查询elastic search测试了这些查询,它们可以工作,所以spark/es hadoop有问题。
0aydgbwb

0aydgbwb1#

默认情况下,api会在实际查询前面添加“query”:{}。对于elasticsearch,您发送的查询将如下所示

"query" :{
"match" : {"key" : "value"}
}

这是无效的。

相关问题