apache-spark - 在ElasticSearch中将Spark DateType字段索引为日期

标签 apache-spark elasticsearch

我正在尝试使用elasticsearch-hadoop连接器在ElasticSearch中为以下架构的DataFrame编制索引。

 |-- 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。根据我正在使用的连接器的文档(如下所示),Spark中的DateType字段应在ElasticSearch中以字符串格式的日期编写。当我希望利用日期字段在Kibana中建立一些可视化对象时,由于久而久之,事实证明它们的编写是有问题的。

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日期的步骤吗?

最佳答案

很久没用ElasticSearch了。但是这个DateType问题对我来说真的很烦。

我正在做的这项工作是:
*在Spark中将DateType转换为纪元时间戳(不确定此处是否必要)
*在初始化索引方案时,在Kibana中指定或使用curL PUT请求进行指定,以使字段CHARTDATE的日期类型如下所示:

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

我不知道Elastic 6.4是否更改了任何内容,如果您找到了更好的解决方案,请稍后与我们分享!

我知道这并不是最好的解决方案,必须在运行Spark的saveToEs操作之前先输入索引。但这确实是为我解决的问题。

关于apache-spark - 在ElasticSearch中将Spark DateType字段索引为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52253025/

相关文章:

elasticsearch - ElasticSearch |如何搜索包含空格的字符串列表?

performance - Kibana旋转了很长时间

python - 如何上传文件到新的EMR集群

scala - spark sql圆圆的

scala - Spark UDAF 与 ArrayType 作为 bufferSchema 性能问题

apache-spark - 部署模式客户端和主 yarn 客户端之间有什么关系

c# - Elasticsearch PUT文档的排列顺序很奇怪

scala - 在 zeppelin notebook 中保存 Spark 流消耗的 kafka 消息

Grails 启动错误 : groovy. lang.Closure.rehydrate(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lgroovy/lang/Closure;

regex - Elasticsearch 正则表达式从右边获取最后7位数字