【问题标题】:Pyspark es.query only works when defaultPyspark es.query 仅在默认情况下有效
【发布时间】:2017-09-13 20:34:43
【问题描述】:

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

*我已经通过直接查询弹性搜索测试了查询,它们可以正常工作,所以 spark/es-hadoop 有问题。

【问题讨论】:

  • Juist 确认一下,您在查询定义和rdd.first() 调用之间使用了相同的命令,对吗?
  • 是的,除了 es_query 之外的一切都保持不变。

标签: hadoop apache-spark elasticsearch pyspark


【解决方案1】:

默认情况下,API 在您的实际查询前添加“查询”:{}。 对于弹性搜索,您发送的查询将如下所示

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

这是无效的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 2014-01-17
    • 2010-12-02
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多