Puede que se de el caso de que halles algún error con tu código o proyecto, recuerda probar siempre en un entorno de testing antes aplicar el código al proyecto final.
Solución:
Para instalar necesitarás estas bibliotecas:
pip install sasl
pip install thrift
pip install thrift-sasl
pip install PyHive
Si está en Linux, es posible que deba instalar SASL por separado antes de ejecutar lo anterior. Instalar el paquete libsasl2-dev
utilizando apt-get
o yum
o cualquier administrador de paquetes. Para Windows hay algunas opciones en GNU.org. En una Mac, SASL debería estar disponible si ha instalado las herramientas de desarrollo de xcode (xcode-select --install
)
Después de la instalación, puede ejecutar una consulta de colmena como esta:
from pyhive import hive
conn = hive.Connection(host="YOUR_HIVE_HOST", port=PORT, username="YOU")
Ahora que tiene la conexión Hive, tiene opciones sobre cómo usarla. Puede realizar una consulta directa:
cursor = conn.cursor()
cursor.execute("SELECT cool_stuff FROM hive_table")
for result in cursor.fetchall():
use_result(result)
… o para usar la conexión para hacer un dataframe de Pandas:
import pandas as pd
df = pd.read_sql("SELECT cool_stuff FROM hive_table", conn)
Puede usar la biblioteca Hive para acceder a Hive desde python, para eso desea importar Hive Class desde Hive import ThriftHive
Debajo del ejemplo
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)
Al final de todo puedes encontrar las explicaciones de otros usuarios, tú todavía tienes el poder dejar el tuyo si dominas el tema.