2017-09-13 57 views
1

在pypspark中,我可以从ES返回数据的唯一方法是通过保留es.query默认值。为什么是这样?Pyspark 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) 

*我已经通过直接查询弹性的搜索测试的查询和他们工作,所以这是什么毛病火花/ ES-的Hadoop。

+0

Juist确认,您在查询定义和'rdd.first()'调用之间使用相同的命令,对吗? –

+0

是的,除es_query之外的所有内容都保持不变。 – buster

回答

0

默认情况下,API会在实际查询前添加“query”:{}。 对于elasticsearch您发送的查询将看起来像

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

这是无效的。