【发布时间】:2018-10-20 12:59:22
【问题描述】:
我正在尝试使用 pyspark 从 elasticsearch 中提取一些数据。我只想从文档中提取几个字段(不是全部)。所以,我正在从软件“Postman”(用于测试目的)发出一个带有以下 url 和 body 的帖子请求。它按预期提供了完美的输出。但是,当我使用带有 spark 代码的相同正文时,它会从指定的文档中提取所有不需要的字段。谁能说出这种奇怪行为的原因可能是什么?提前致谢!
Spark 2.3 版,Elasticsearch 6.2 版,postman 正文类型 = application/json
这就是我对邮递员所做的:
`url : localhost:9200/test-index4/school/_search`
`body :
{
"query":
{
"ids":
{
"values":["8","9","10"]
}
},
"_source":
{
"includes":["name"]
}
}`
下面是我用 pyspark 做的事情:
`body = "{"query":{"ids":{"values":["8","9","10"]}},"_source":{"includes":["name"]}}"
df = self.__sql_context.read.format("org.elasticsearch.spark.sql") \
.option("es.nodes", "localhost") \
.option("es.port", "9200") \
.option("es.query", body) \
.option("es.resource", "test-index4/school") \
.option("es.read.metadata", "true") \
.option("es.read.metadata.version", "true") \
.option("es.read.field.as.array.include", "true") \
.load()
`
【问题讨论】:
-
This 可能是您需要的。
es.read.field.include配置。 -
成功了!非常感谢@mkaran。但是您仍然知道这种奇怪行为的原因吗?
es.read.metadata.version也不读版本。你能解释一下为什么吗? -
我很高兴它成功了!好吧,默认情况下,elasticsearch 会为您带来所有字段,来自docs:如果未设置
es.read.field.include,则默认为 null 并返回所有字段。至于metadata.version我不知道,因为您已将es.read.metadata和es.read.metadata.version都设置为true,据我所知这是正确的配置。 -
好的,谢谢@mkaran!
标签: elasticsearch pyspark