使用 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,我会很高兴。我将此作为其他用户的脚本编写,因此必须在脚本中完成所有这些操作。非常感谢!
最佳答案
你会爱上 Ibis !它具有 HDFS 功能(即 put
)并包装了 Impala DML 和 DDL,您需要它来简化此操作。
我用于类似操作的一般方法是将您的 pandas 表保存到 CSV 中,HDFS.put
将其保存到集群中,然后使用该 CSV 作为数据源。
为此,您不需要 Ibis,但它应该会让它变得更容易一些,如果您已经熟悉 pandas,它可能是一个不错的工具(Ibis 也是由Wes,编写了 pandas)。
关于python - 将 pandas 表写入 impala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32338006/