将 pandas 表写入 impala
Posted
技术标签:
【中文标题】将 pandas 表写入 impala【英文标题】:Write pandas table to impala 【发布时间】:2015-09-01 17:52:52 【问题描述】:使用 impyla 模块,我已将 impala 查询的结果下载到 pandas 数据框,完成分析,现在想将结果写回 impala 上的表,或者至少写回 hdfs 文件。
但是,我找不到有关如何执行此操作的任何信息,甚至找不到如何通过 ssh 进入 impala shell 并从那里写入表。
我想做的事:
from impala.dbapi import connect
from impala.util import as_pandas
# connect to my host and port
conn=connect(host='myhost', port=111)
# create query to save table as pandas df
create_query = """
SELECT * FROM
""".format(my_table_name)
# run query on impala
cur = conn.cursor()
cur.execute(create_query)
# store results as pandas data frame
pandas_df = as_pandas(cur)
cur.close()
一旦我完成了我需要对 pandas_df 执行的任何操作,请将这些结果作为表格保存回 impala。
# create query to save new_df back to impala
save_query = """
CREATE TABLE new_table AS
SELECT *
FROM pandas_df
"""
# run query on impala
cur = conn.cursor()
cur.execute(save_query)
cur.close()
上述情况是理想的,但如果我能弄清楚如何通过 ssh 进入 impala-shell 并从 python 执行此操作,或者甚至只是将表保存到 hdfs,我会很高兴。我正在为其他用户编写此脚本,因此必须在脚本中完成所有这些工作。非常感谢!
【问题讨论】:
【参考方案1】:你会爱上Ibis!它具有 HDFS 功能(即put
)并包装了您需要的 Impala DML 和 DDL 以使其变得简单。
我用于类似操作的一般方法是将您的 pandas 表保存为 CSV,HDFS.put
保存到集群上,然后使用该 CSV 作为数据源创建一个新表。
您不需要 Ibis,但如果您已经熟悉 pandas(Ibis 也是由Wes,谁写了熊猫)。
【讨论】:
前几天我实际上只是在阅读宜必思酒店。听起来我得去看看。 您好,我在 db.create_table('mytablename',mydataframe) 中的 Ibis 中遇到错误。错误是文件 "C:\Anaconda3\lib\json\decoder.py", line 357, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 列 1(字符 0)。知道可能是什么吗? @艾萨克【参考方案2】:我正在尝试做同样的事情,并通过impyla
提供的示例找到了一种方法:
df = pd.DataFrame(np.reshape(range(16), (4, 4)), columns=['a', 'b', 'c', 'd'])
df.to_sql(name=”test_df”, con=conn, flavor=”mysql”)
这工作正常,impala(后端 mysql)中的表工作正常。
但是,当 impala 尝试对列进行分析时,我一直无法获取文本值,并且出现了转换错误。 (如果可以在 impyla 中从字符串隐式转换为 [var]char(N),那就太好了。)
【讨论】:
以上是关于将 pandas 表写入 impala的主要内容,如果未能解决你的问题,请参考以下文章
“未指定驱动程序名称”将 pandas 数据帧写入 SQL Server 表
将数据从 python pandas 数据帧导出或写入 MS Access 表
Python:在多张工作表上将 Pandas DataFrame 写入 Excel 的最快方法