【问题标题】:Date format issue when reading data from ElasticSearch从 ElasticSearch 读取数据时的日期格式问题
【发布时间】:2020-10-01 08:05:13
【问题描述】:

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

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

`从弹性搜索导入弹性搜索 从 pandasticsearch 导入选择

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

pandas_df = Select.from_dict(文档).to_pandas() 打印(熊猫_df) '

它显示错误的日期格式,我该如何解决?有什么帮助吗? 谢谢你

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

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

    您基本上有 3 个选项:

    1. 使用script_fieldparse/convertts 到人类可读的日期。请注意,您需要从响应 b/c 中提取脚本字段,它们不是_source 的一部分。

    2. Convert 获取文档之后但将它们加载到 df 之前的时间戳(最好在循环/列表理解/映射中)。

    3. 使用已转换的时间戳重新索引您的数据。这可以从inside of an _update script 完成,您不需要放弃所有内容。

    更新

    第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 ...
    
    

    【讨论】:

    • import datetime print(datetime.datetime.fromtimestamp(int("1284105682")).strftime('%Y-%m-%d %H:%M:%S')) 我发现这但我不知道如何将它应用于许多列因为它不是一个变量我需要修改 6 列 .... !!帮助
    • 更新了我的答案。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2017-02-27
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多