Я пытаюсь проиндексировать DataFrame
приведенной ниже схемы в ElasticSearch, используя разъем эластичного поиска-hadoop.
|-- ROW_ID: long (nullable = false)
|-- SUBJECT_ID: long (nullable = false)
|-- HADM_ID: long (nullable = true)
|-- CHARTDATE: date (nullable = false)
|-- CATEGORY: string (nullable = false)
|-- DESCRIPTION: string (nullable = false)
|-- CGID: integer (nullable = true)
|-- ISERROR: integer (nullable = true)
|-- TEXT: string (nullable = true)
При записи этого DataFrame в ElasticSearch поле «CHARTDATE» записывается как long. В соответствии с документацией для соединителя, который я использую (показано ниже), поля DateType
в Spark должны быть записаны как строки в формате ElasticSearch. Так как я надеялся создать некоторые визуализации в Кибане, используя поля даты, их запись в длинных полях оказывается проблематичной.
https://www.elastic.co/guide/en/elasticsearch/hadoop/6.4/spark.html
Код, использованный для выдачи ошибки
val elasticOptions = Map(
"es.nodes" -> esIP,
"es.port" -> esPort,
"es.mapping.id" -> primaryKey,
"es.index.auto.create" -> "yes",
"es.nodes.wan.only" -> "true",
"es.write.operation" -> "upsert",
"es.net.http.auth.user" -> esUser,
"es.net.http.auth.pass" -> esPassword,
"es.spark.dataframe.write.null" -> "true",
"es.mapping.date.rich" -> "true"
)
castedDF.saveToEs(index, elasticOptions)
Есть ли шаг, который я пропускаю, чтобы эти значения были записаны как даты ES?