python - 将 pandas 表写入 impala

标签 python hadoop hdfs impala

使用 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/

相关文章:

python - 生日悖论,输出错误约 1

hadoop - 将文件迁移到hdfs后的数据比较

python - if else-if 使代码看起来丑陋任何更清洁的解决方案?

Python unix时间戳转换和时区

python - Repl.it 和 FFmpeg

shell - 我可以使用-put命令在HDFS中传输文件吗?

java - 从 Java 进行数据处理的工具

hadoop - 文件复制到 DataNodes 时 Hadoop HDFS 中的数据流管道

hadoop - 如何从 Spark 中查看底层 Hadoop 文件系统

hadoop - HIVE 外部表 - 将空字符串设置为 NULL