Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 将Spark DateType字段索引为ElasticSearch中的日期_Apache Spark_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Apache Spark,elasticsearch" /> elasticsearch,Apache Spark,elasticsearch" />

Apache spark 将Spark DateType字段索引为ElasticSearch中的日期

Apache spark 将Spark DateType字段索引为ElasticSearch中的日期,apache-spark,elasticsearch,Apache Spark,elasticsearch,我正在尝试使用ElasticSearch hadoop连接器在ElasticSearch中为下面模式的数据帧编制索引 |-- ROW_ID: long (nullable = false) |-- SUBJECT_ID: long (nullable = false) |-- HADM_ID: long (nullable = true) |-- CHARTDATE: date (nullable = false) |-- CATEGORY: string (nullable = fa

我正在尝试使用ElasticSearch hadoop连接器在ElasticSearch中为下面模式的数据帧编制索引

 |-- 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)
将此数据框写入ElasticSearch时,“CHARTDATE”字段被写入为长字段。根据我正在使用的连接器文档(如下所示),Spark中的
DateType
字段应在ElasticSearch中以字符串格式的日期写入。当我希望利用日期字段在Kibana中构建一些可视化时,将它们写成long被证明是有问题的

用于产生错误的代码

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;但是这个日期类型的问题对我来说真的很烦人

我所做的工作是: *在Spark中将日期类型转换为历元时间戳(此处不确定是否需要此步骤) *在Kibana中或在我初始化索引方案时使用curL-PUT请求指定字段CHARTDATE的日期类型如下:

PUT /spark
{
 "mappings": {
  "log": {
    "properties": {
      "CHARTDATE": {
        "type": "date"
      }
    }
  }
 }
} 
我不知道Elastic 6.4是否改变了什么,如果您能找到更好的解决方案,请稍后与我们分享,我将不胜感激


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

很长时间我都没有使用ElasticSearch;但是这个日期类型的问题对我来说真的很烦人

我所做的工作是: *在Spark中将日期类型转换为历元时间戳(此处不确定是否需要此步骤) *在Kibana中或在我初始化索引方案时使用curL-PUT请求指定字段CHARTDATE的日期类型如下:

PUT /spark
{
 "mappings": {
  "log": {
    "properties": {
      "CHARTDATE": {
        "type": "date"
      }
    }
  }
 }
} 
我不知道Elastic 6.4是否改变了什么,如果您能找到更好的解决方案,请稍后与我们分享,我将不胜感激


我知道这并不是最好的解决方案,必须在运行Spark的saveToEs操作之前放置索引。但这确实是我修复它的原因。

根据文档:


您必须使用格式。

根据文档:


您必须使用格式。

谢谢您的回复!我试着用column(“CHARTDATE”)、to_date(col(“CHARTDATE”)、“yyyy-mm-dd'T:hh:mm:ss.SSSZ”)来转换currentDF.,不幸地得到了同样的问题。我将结合下面的@tricky的种子方法来研究这个强制转换。另外,要调试Spark发送的内容,可以使用Charles这样的HTTP代理,这有助于理解es4hadoop的工作原理。随时通知我们!Thankssend只需要建立一个方法来播种索引。时间戳和日期都被正确处理。@你能详细解释一下你所说的在索引中添加
种子是什么意思吗?我也吃同样的problem@eugene我递归通过
df.schema
返回的模式来构建一个JSON映射,然后在写入数据之前将其发布到ES。有关ES的映射API,请参阅;有关通过模式递归的信息,请参阅(扁平模式响应)。在本例中,您正在查找
DateType
TimestampType
字段。感谢您的回复!我试着用column(“CHARTDATE”)、to_date(col(“CHARTDATE”)、“yyyy-mm-dd'T:hh:mm:ss.SSSZ”)来转换currentDF.
,不幸地得到了同样的问题。我将结合下面的@tricky的种子方法来研究这个强制转换。另外,要调试Spark发送的内容,可以使用Charles这样的HTTP代理,这有助于理解es4hadoop的工作原理。随时通知我们!Thankssend只需要建立一个方法来播种索引。时间戳和日期都被正确处理。@你能详细解释一下你所说的在索引中添加
种子是什么意思吗?我也吃同样的problem@eugene我递归通过
df.schema
返回的模式来构建一个JSON映射,然后在写入数据之前将其发布到ES。有关ES的映射API,请参阅;有关通过模式递归的信息,请参阅(扁平模式响应)。在本例中,您正在查找
DateType
TimestampType
字段。使用put请求为ES索引添加日期字段种子解决了我的问题。谢谢你的建议!使用put请求在ES索引中添加日期字段,解决了我的问题。谢谢你的建议!