Pyspark es.query 仅在默认情况下有效
Posted
技术标签:
【中文标题】Pyspark es.query 仅在默认情况下有效【英文标题】:Pyspark es.query only works when default 【发布时间】: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 之外的一切都保持不变。
【参考方案1】:
默认情况下,API 在您的实际查询前添加“查询”:。 对于弹性搜索,您发送的查询将如下所示
"query" :
"match" : "key" : "value"
这是无效的。
【讨论】:
以上是关于Pyspark es.query 仅在默认情况下有效的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark:如何仅在具有 NotNull 值的行上应用 UDF
Spark(pyspark)如何仅在3元素元组的2个元素上reduceByKey