使用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的任何事情,把这些结果作为一个表保存回 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中,我会很高兴的。我是为其他用户编写一个脚本,所以在脚本中完成这一切是非常必要的。非常感谢!
2条答案
按热度按时间ktecyv1j1#
你会爱上朱鹮的!它具有hdfs功能(
put
,即)和 Package Impala dml和ddl,您将需要使这变得容易。我使用的一般方法是将pandas表保存为csv,
HDFS.put
然后使用该csv作为数据源创建一个新表。你不需要用朱鹮来做这件事,但是如果你已经熟悉Pandas的话,它应该会让你的工作变得简单一点,对你来说可能是一个很好的工具(朱鹮也是韦斯写的Pandas)。
3npbholx2#
我也在尝试做同样的事情,我通过提供的一个例子找到了一个方法
impyla
:这很好,impala(后端mysql)中的表也很好。
然而,当 Impala 试图对列进行分析时,我陷入了获取文本值的困境,我得到了转换错误(如果可能的话,将字符串隐式地转换为impyla中的[var]char(n)会非常好。)