2015-09-01 86 views
5

使用impyla模塊,我將impala查詢的結果下載到了熊貓數據框中,完成了分析,現在想將結果寫回到impala上的表格,或者至少一個hdfs文件。將熊貓表寫入impala

但是,我找不到任何有關如何執行此操作的信息,甚至無法找到有關如何執行此操作的信息,甚至不知道如何ssh進入impala外殼並從那裏寫入表格。

我想做什麼:

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做,回到黑斑羚保存這些結果的表。

# 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到黑斑羚殼,做這個蟒蛇,甚至只是表保存到HDFS。我正在將其作爲其他用戶的腳本編寫,因此在腳本中完成這些操作是非常重要的。非常感謝!

回答

3

你會愛上Ibis!它具有HDFS功能(即put),幷包裝您需要的Impala DML和DDL以簡化操作。

我用於類似的一般方法是將您的熊貓表保存爲CSV,HDFS.put,然後創建一個使用該CSV作爲數據源的新表。

你不需要需要宜必思爲這個,但它應該使它更容易一些,如果你已經熟悉熊貓可能是一個很好的工具(Ibis也是由Wes創建的,他寫熊貓)。

+0

我其實只是在閱讀有關的一天。聽起來像我必須檢查出來。 – SummerEla

1

我試圖做同樣的事情,我想出一個辦法與設有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」) 

此作品在黑斑羚(後端的MySQL)的罰款和表工作正常。

但是,由於impala試圖對列進行分析並且出現轉換錯誤,所以我陷入了獲取文本值的困境。 (如果可能的話,隱式地將字符串轉換爲[var] char(N)in impyla)將會非常好。)