Индексирование полей типа искры DateType в качестве дат в ElasticSearch - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь проиндексировать 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?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Согласно документации: https://www.elastic.co/guide/en/elasticsearch/hadoop/current/mapping.html#mapping-date

Вы должны использовать формат https://en.wikipedia.org/wiki/ISO_8601.

0 голосов
/ 10 сентября 2018

Долгое время у меня не было Spark с ElasticSearch;Но эта проблема с DateType действительно раздражала меня.

Что я делал, чтобы сделать эту работу: * Преобразовал DateType в метку времени эпохи в Spark (не уверен, если это необходимо здесь) * Укажите в Kibana или с помощьюcurL PUT запрос, когда я инициализирую схему индекса, что поле CHARTDATE будет иметь тип даты, подобный этому:

PUT /spark
{
 "mappings": {
  "log": {
    "properties": {
      "CHARTDATE": {
        "type": "date"
      }
    }
  }
 }
} 

Я не знаю, изменил ли Elastic 6.4 что-нибудь, и если вы найдете лучшее решение, я был бы признателен, если бы выможете поделиться с нами позже!

Я знаю, что это на самом деле не лучшее решение, потому что нужно ПОЛОЖИТЬ индекс перед запуском действия saveToEs из Spark.Но это действительно было то, что исправило это для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...