首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将pandas表写入impala

将pandas表写入impala
EN

Stack Overflow用户
提问于 2015-09-02 01:52:53
回答 2查看 10.7K关注 0票数 10

使用impyla模块,我已经将impala查询的结果下载到pandas数据帧中,完成了分析,现在希望将结果写回到impala上的一个表中,或者至少写到一个hdfs文件中。

但是,我找不到任何关于如何做到这一点的信息,甚至找不到如何ssh到impala shell中并从那里写入表的信息。

我想做的是:

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
# 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,我会很高兴。我将此作为其他用户的脚本来编写,因此必须在脚本中完成所有这些操作。非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-03 04:47:23

你会爱上Ibis的!它具有HDFS函数(即put),并包装了您需要的Impala DML和DDL,以简化此操作。

对于类似的情况,我使用的一般方法是将pandas表保存到CSV,将其HDFS.put到集群,然后使用该CSV作为数据源创建一个新表。

你不需要Ibis来做这件事,但是如果你已经熟悉pandas (Ibis也是由Wes创建的,他写了pandas),它应该会让你的工作变得更容易,并且对你来说可能是一个很好的工具。

票数 5
EN

Stack Overflow用户

发布于 2015-10-10 04:09:29

我也在尝试做同样的事情,我想出了一种方法,用impyla提供的一个示例来实现

代码语言:javascript
运行
复制
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)中的table也很好用。

然而,当impala尝试对列进行分析时,我遇到了获取文本值的问题,并且我得到了强制转换错误。(如果可以在impyla中隐式地从string转换为varchar(N),那就太好了。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32338006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档