当前位置: 首页 > 知识库问答 >
问题:

从ElasticSearch读取数据时出现日期格式问题

厍书
2023-03-14

我正在从弹性搜索中读取数据。当我在kibana上可视化日期格式时,它显示日期8月5,2020 @ 23:00:00.000 =

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

'from elasticsearch import Elasticsearch from pandasticsearch import Select

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

pandas_df = Select.from_dict(文档).to_pandas() print(pandas_df) '

显示日期格式不对,怎么解决?有帮助吗?谢谢你

共有1个答案

张华池
2023-03-14

1.596665e 12 等于 1596665000000 这是一个 unix 毫秒时间戳,对应于 2020 年 8 月 5 日星期三晚上 10:03:20 在 GMT 中。

您基本上有3个选项:

> < li>

使用< code>script_field将< code>ts解析/转换为人类可读的日期。请注意,您需要从响应b/c中提取脚本字段,它们不是< code>_source的一部分。

在获取文档之后,将它们加载到df之前,转换时间戳(最好是在循环/列表理解/映射中)。

使用已转换的时间戳重新索引数据。这可以从<code>_update

更新

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

 类似资料:
  • 在将值打印到之前,需要关于如何在中设置值的最新格式的指导。 我是新手,当值输出到

  • 我试图分块读取输入流并写入文件以避免内存问题,我接收json格式的数据,并使用以下代码写入文件。 我的问题是,大多数json都写得很好,虽然其中一些包含损坏的数据,但我不确定我是否正确地将CharBuffer与BufferedReader一起使用,我观察到的另一件事是,对于少量数据,它正确地将CharBuffer写入文件,当我从服务器接收到更大的数据(大约2MB的输入流-不是很大)时,我通常会遇到

  • 问题内容: 当我将日期拉出数据库时,它像这样回来: 2009-10-14T19:00:00 我想用两种不同的方式格式化它… 第一个:F d,Y第二个h:m(12小时格式) 我尝试的所有内容都在1969年12月返回…帮助吗?我感到很困惑 问题答案: 通常,代码只是: 请注意,如果无法确定日期,则将时间返回为1/1/1970 00:00:00 GMT 。

  • 我目前正在Android中使用静态编程语言进行培训,每当我试图访问Firebase数据库中当前的数据时都会遇到问题。下面是数据库中的数据: 数据库映像 之后,在将应用程序链接到Firebase之后,我刚刚创建了一个包含所有必需导入的主活动,但不幸的是,每当我执行应用程序并按下按钮时,什么都没有发生。 日志没有出现任何时间,它真的很烦人,因为我在留档中搜索,据我所知,这是我应该做的一切(我还检查了数

  • 问题内容: 不幸的是raw_input并没有做我需要做的事。我想做的就是获取totPrimes =我在提示符下键入的任何内容。如果我用此脚本替换工作。如果在提示中输入50,则此脚本无效,恐怕raw_input不是我要使用的函数吗?这是我的代码片段: 问题答案: 做 给您一个字符串,您必须先将其转换为整数或浮点数,然后再进行数字比较。

  • 我正在尝试将DatePicker日期格式化为简单的数据格式(“yyyy-MM-dd HH: mm: ss Z”)。有人告诉我,我需要使用简单的数据格式将其解析为日期对象-简单的数据格式(“yyyy-MM-dd”),然后将其格式化为我需要的内容,如下所示。但是,我在尝试捕捉块中收到错误“重复局部变量eDate”。任何专家都可以查看我的代码并提出建议吗? 已更新