【问题标题】:elasticsearch-pyspark : not getting specific fields from document (getting all fields) even after specifying with sparkelasticsearch-pyspark:即使在使用 spark 指定之后,也没有从文档中获取特定字段(获取所有字段)
【发布时间】: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.metadataes.read.metadata.version 都设置为true,据我所知这是正确的配置。
  • 好的,谢谢@mkaran!

标签: elasticsearch pyspark


【解决方案1】:

尝试在配置中设置es.read.field.include,并将值作为逗号分隔的字段列表。 例如"es.read.field.include","field1,field2,..."

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-04
    • 2021-07-22
    • 2016-03-31
    • 2013-01-01
    • 2023-02-21
    • 2020-09-20
    • 2021-07-04
    • 1970-01-01
    相关资源
    最近更新 更多