如何将 presto 查询输出转换为 python 数据框
Posted
技术标签:
【中文标题】如何将 presto 查询输出转换为 python 数据框【英文标题】:How to convert a presto query output to a python data frame 【发布时间】:2019-09-23 02:23:51 【问题描述】:我想将我的查询输出转换为 python 数据框来绘制折线图
import prestodb
import pandas as pd
conn=prestodb.dbapi.connect(
host='10.0.0.101',
port=8081,
user='hive',
catalog='hive',
schema='ong',
)
cur = conn.cursor()
query="SELECT dtime,tagName FROM machine where tagname is not null
limit 1000"
cur.execute(query)
rows = cur.fetchall()
print(rows)
df = pd.DataFrame(query, columns=['x_axis','tagName'])
这是我的查询输出示例
[['2018-09-08 00:00:00.000', 26], ['2018-09-08 01:00:00.000', 26],
['2018-09-08 02:00:00.000', 26], ['2018-09-08 03:00:00.000', 27],
['2018-09-08 04:00:00.000', 27], ['2018-09-08 05:00:00.000', 27]]
如何使用python将此查询输出转换为数据框
【问题讨论】:
【参考方案1】:很简单,我建议你使用pyhive.presto
连接器(见:https://github.com/dropbox/PyHive)来连接presto,而且你使用的那个也应该以同样的方式工作。
那么你有几个选择:
1 - 使用 presto 连接和 pandas read_sql_query
2 - 使用 presto cursor 并使用 fetchall 的输出作为数据帧的输入数据。
# option 1
import pandas as pd
from pyhive import presto
connection = presto.connect(user='my-user', host='presto.my.host.com', port=8889)
df = pd.read_sql_query("select 100", connection)
print(
df.head()
)
或
# option 2
import pandas as pd
from pyhive import presto
connection = presto.connect(user='my-user', host='presto.my.host.com', port=8889)
cur = connection.cursor()
cur.execute("select 100")
df = pd.DataFrame(cur.fetchall())
print(
df.head()
)
【讨论】:
【参考方案2】:df = pd.DataFrame(cur.fetchall()) 打印(df)
【讨论】:
以上是关于如何将 presto 查询输出转换为 python 数据框的主要内容,如果未能解决你的问题,请参考以下文章
如何将表示 EPOCH 时间的整数转换为 Athena (Presto) 中的时间戳?
在 Presto 中将存储为 INT 的时间转换为 VARCHAR