将 pandas 表写入 impala

Posted

技术标签:

【中文标题】将 pandas 表写入 impala【英文标题】:Write pandas table to impala 【发布时间】:2015-09-01 17:52:52 【问题描述】:

使用 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,我会很高兴。我正在为其他用户编写此脚本,因此必须在脚本中完成所有这些工作。非常感谢!

【问题讨论】:

【参考方案1】:

你会爱上Ibis!它具有 HDFS 功能(即put)并包装了您需要的 Impala DML 和 DDL 以使其变得简单。

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

您不需要 Ibis,但如果您已经熟悉 pandas(Ibis 也是由Wes,谁写了熊猫)。

【讨论】:

前几天我实际上只是在阅读宜必思酒店。听起来我得去看看。 您好,我在 db.create_table('mytablename',mydataframe) 中的 Ibis 中遇到错误。错误是文件 "C:\Anaconda3\lib\json\decoder.py", line 357, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 列 1(字符 0)。知道可能是什么吗? @艾萨克【参考方案2】:

我正在尝试做同样的事情,并通过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),那就太好了。)

【讨论】:

以上是关于将 pandas 表写入 impala的主要内容,如果未能解决你的问题,请参考以下文章

“未指定驱动程序名称”将 pandas 数据帧写入 SQL Server 表

将 Pandas 数据框的全部内容写入 HTML 表

将数据从 python pandas 数据帧导出或写入 MS Access 表

Python:在多张工作表上将 Pandas DataFrame 写入 Excel 的最快方法

Pandas向本地Excel已存在的工作表追加写入DataFrame

使用 pandas 和 XlsxWriter 写入现有的 .xlsm