gpt4 book ai didi

elasticsearch - 从ElasticSearch读取数据时日期格式问题

转载 作者:行者123 更新时间:2023-12-02 23:08:55 25 4
gpt4 key购买 nike

我正在从elasticsearch读取数据。当我在kibana上可视化日期格式时,它显示
日期2020年8月5日@ 23:00:00.000 =>所以它是正确的
但是当我从elasticsearch中读取它来进行一些机器学习时,
我注意到日期格式错误
日期1.596665e + 12

我正在使用pyspark将索引的内容收集到一个数据帧中,如果有任何解决方案,我可以在scala中完成

`from elasticsearch导入Elasticsearch
从pandasticsearch导入选择

es = Elasticsearch(['http://localhost:9200'],timeout = 600)
文档= es.search(index ='sub1',body = {})

pandas_df = Select.from_dict(documents..to_pandas()
打印(pandas_df)
'

日期格式错误,如何解决?有帮助吗?
感谢你

最佳答案

1.596665e+12等于1596665000000,它是与GMT中Wednesday, August 5, 2020 10:03:20 PM对应的unix毫秒时间戳。

您基本上有3个选择:

  • 使用script_fieldts设置为人类可读的日期。请注意,您需要从响应b / c中提取脚本字段,它们不属于_source
  • parse/convert在获取文档之后但在将文档加载到df中之前的时间戳(最好在循环/列表理解/ map 中)。
  • 使用已转换的时间戳重新索引您的数据。这可以通过Convert完成,您不需要删除所有内容。

  • 更新

    第2点的实现
    from elasticsearch import Elasticsearch
    from datetime import datetime as dt


    def convert_ts(hit):
    hit = hit['_source']

    try:
    ts_from_doc = hit.get('date_field', None)

    if not ts_from_doc:
    raise ValueError('`date_field` not found')

    # incoming as millisec so convert to sec
    as_date = dt.fromtimestamp(
    int(ts_from_doc / 1000.0)
    ).strftime('%Y-%m-%d %H:%M:%S')

    hit['date_field_as_date'] = as_date

    except Exception as e:
    print(e)

    return hit


    es = Elasticsearch(['http://localhost:9200'], timeout=600)
    documents = es.search(index='sub1', body={})['hits']['hits']
    documents = [convert_ts(doc) for doc in documents]

    print(documents)

    # pandas etc ...

    关于elasticsearch - 从ElasticSearch读取数据时日期格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62328452/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com