2013-07-18 5 views

ответ

6

Вы можете использовать улую библиотеку для улья доступа из питона, для который вы хотите импортировать улей класса из улья импорта ThriftHive

Ниже приведен пример

import sys 

from hive import ThriftHive 
from hive.ttypes import HiveServerException 

from thrift import Thrift 
from thrift.transport import TSocket 
from thrift.transport import TTransport 
from thrift.protocol import TBinaryProtocol 

try: 
    transport = TSocket.TSocket('localhost', 10000) 
    transport = TTransport.TBufferedTransport(transport) 
    protocol = TBinaryProtocol.TBinaryProtocol(transport) 
    client = ThriftHive.Client(protocol) 
    transport.open() 
    client.execute("CREATE TABLE r(a STRING, b INT, c DOUBLE)") 
    client.execute("LOAD TABLE LOCAL INPATH '/path' INTO TABLE r") 
    client.execute("SELECT * FROM r") 
    while (1): 
    row = client.fetchOne() 
    if (row == None): 
     break 
    print row 

    client.execute("SELECT * FROM r") 
    print client.fetchAll() 
    transport.close() 
except Thrift.TException, tx: 
    print '%s' % (tx.message) 
+0

плз скажи мне, как получить улей библиотеки? –

+0

вы можете получить эту библиотеку из $ HIVE_HOME/lib/py/* копировать содержимое внутри папки py и прошлое в библиотеку python – Sreejith

+0

@Sreejith У меня нет проблем с импортом этих библиотек python, однако код зависает после выполнения команды hive. И это оказалось общей проблемой. Был ли ваш код подключен к Hiveserver1 или Hiveserver2? https://groups.google.com/a/cloudera.org/forum/#!topic/cdh-user/lCSuh6vLmHM –

9

Для установки вам потребуется эти библиотеки:

pip install sasl 
pip install thrift 
pip install thrift-sasl 
pip install PyHive 

Если вы работаете в Linux, вам может потребоваться установить SASL отдельно до запуска используя вышеизложенное. Установите пакет libsasl2-dev с помощью apt-get или yum или любого другого менеджера пакетов. Для Windows есть некоторые опции on GNU.org. На Маке SASL должен быть доступен, если вы установили инструменты разработчика Xcode (xcode-select --install)

После установки, вы можете выполнить улья запрос так:

from pyhive import hive 
conn = hive.Connection(host="YOUR_HIVE_HOST", port=PORT, username="YOU") 

Теперь, когда у вас есть улое соединение, вам есть варианты использования. Вы можете просто прямо вверх запрос:

cursor = conn.cursor() 
cursor.execute("SELECT cool_stuff FROM hive_table") 
for result in cursor.fetchall(): 
    use_result(result) 

... или использовать соединение, чтобы сделать панду dataframe:

import pandas as pd 
df = pd.read_sql("SELECT cool_stuff FROM hive_table", conn) 
+1

«Не удалось запустить SASL:% s»% self.sasl.getError() »- под Windows 2008 R2, python 3.6 Как решить эту проблему? –

Смежные вопросы