【问题标题】:Spark elasticsearch connector: how to select _id field?Spark elasticsearch连接器:如何选择_id字段?
【发布时间】:2020-12-08 14:07:11
【问题描述】:

我正在使用 spark elasticsearch 连接器,我想从 ES 中提取一些字段以及 _id。

myquery = """{"query":..., """
val df = spark.read.format("org.elasticsearch.spark.sql")
                 .option("query", myquery)
                 .option("pushdown", "true")
                 .load("myindex/mytype")
                 .limit(10) 
                 .select("myfield","_id") 

很遗憾,_id 字段无法识别:

AnalysisException: u'cannot resolve \'`_id`\' given input columns: 
[query, size, @version, @timestamp, 
 sourceinfo, signaletic, document, metadata, fields, aggs]

使用此映射,我可以选择例如 document.{fieldA}、sourceinfo.{fieldB} 等,但不能选择 _id。就像它在映射中的水平很高。

知道如何获取这个特定字段吗?

【问题讨论】:

  • 我添加了一个答案,如果这对您有帮助,请告诉我。我遇到了同样的问题。我希望解决方案对您有用

标签: sql apache-spark elasticsearch


【解决方案1】:

您可以通过将es.read.metadata 设置为True 来访问_id 或元数据

例如在您的代码中:

myquery = """{"query":..., """
val df = spark.read.format("org.elasticsearch.spark.sql")
                 .option("query", myquery)
                 .option("pushdown", "true")
                 .option("es.read.metadata",True) # Set it to True
                 .load("myindex/mytype")
                 .limit(10) 
                 .select("myfield","_id") 

当你这样做时

df.show(5)

它将打印类似(在我的情况下)

 |-- user_id: string (nullable = true)
 |-- user_rt: string (nullable = true)
 |-- user_rt_id: string (nullable = true)
 |-- username: string (nullable = true)
 |-- video: long (nullable = true)
 |-- _metadata: map (nullable = true) # this map column will be added
 |    |-- key: string
 |    |-- value: string (valueContainsNull = true)

您可以进一步提取属性,例如 _index, _type, _id, _score, sort 来自_元数据列

要从 _metadata(地图类型)访问 _id 列,我已经使用了这个,您可以使用您认为最好的方式

df.createOrReplaceTempView('temp_table_name')
spark.sql(""" 
     SELECT 
     _metadata._id as reference_id 
     FROM temp_table_name 
    """)

希望这能解决你的问题

【讨论】:

    【解决方案2】:

    spark SQL 不支持某些特殊字符,如 _,₹。请尝试将特殊字符替换为其他字符,如“Id”。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 2018-03-24
    • 2012-12-31
    • 1970-01-01
    • 2021-04-10
    • 2014-08-27
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多