2017-09-13 8 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-のHadoopと間違って何かがある私が直接弾性検索を照会することによって、クエリをテストしていると、彼らは仕事*

es_query = {"match_all" : {}} 
... 
rdd.first() 
(u'2017-01-01 23:59:59) 

を動作するようです。

+0

あなたが確認するには、クエリ定義と 'rdd.first()'コールの間で同じコマンドを使用していますが、正しいですか? –

+0

はい、es_query以外はすべて同じままです。 – buster

答えて

0

デフォルトでは、APIは実際のクエリの前に「query」:{}を追加します。 はelasticsearchについて、あなたが送信しているクエリは有効ではありません

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

のようになります。

関連する問題