将pandas表写入impala

eeq64g8w  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(1062)

使用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中,我会很高兴的。我是为其他用户编写一个脚本,所以在脚本中完成这一切是非常必要的。非常感谢!

ktecyv1j

ktecyv1j1#

你会爱上朱鹮的!它具有hdfs功能( put ,即)和 Package Impala dml和ddl,您将需要使这变得容易。
我使用的一般方法是将pandas表保存为csv, HDFS.put 然后使用该csv作为数据源创建一个新表。
你不需要用朱鹮来做这件事,但是如果你已经熟悉Pandas的话,它应该会让你的工作变得简单一点,对你来说可能是一个很好的工具(朱鹮也是韦斯写的Pandas)。

3npbholx

3npbholx2#

我也在尝试做同样的事情,我通过提供的一个例子找到了一个方法 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)会非常好。)

相关问题