我将来自Apache Spark的文档通过Structured Streaming插入到ES中。
但是Spark-ES连接器中存在一个未解决的错误(https://github.com/elastic/elasticsearch-hadoop/issues/1173),其负面影响是源端(Spark)上的日期字段作为unix发送-timestamps / long类型到接收器(ES)。
我认为在ES端转换它的索引模板可能是一个很好的解决方法,可以在ES中使用正确的格式(日期)。
我的索引模板是:
{
"index_patterns": "my_index_*",
"mappings": {
"peerType_count": {
"dynamic_templates": [
{
"timestamps": {
"path_match": "*.window.*",
"match_mapping_type": "long",
"mapping": {
"type": "date",
"format": "epoch_millis"
}
}
}
]
}
}
}
但是ES中的文档仍然是unix时间戳: - /
{
"_index": "my_index",
"_type": "peerType_count",
"_id": "kUGWNmcBtkL7EG0gS280",
"_version": 1,
"_score": 1,
"_source": {
"window": {
"start": 1535958000000,
"end": 1535958300000
},
"input__source_peerType": "peer2",
"count": 1
}
}
有人知道可能是什么问题吗?
PS:有没有可用的es-mapping-debugger?
只需在ES中使用以下http请求创建一个摄取管道:
PUT _ingest/pipeline/fix_date_1173
{
"description": "converts from unix ms to date, workaround for https://github.com/elastic/elasticsearch-hadoop/issues/1173",
"processors": [
{
"date": {
"field": "window.start",
"formats": ["UNIX_MS"],
"target_field":"window.start"
}
},
{
"date": {
"field": "window.end",
"formats": ["UNIX_MS"],
"target_field":"window.end"
}
}
]
}
并在你的spark 代码中启用它
.option("es.ingest.pipeline", "fix_date_1173")
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。