2017-07-29 6 views
0

Ich möchte eine Hive-Tabelle (hdfs spot-Instanzen) mit einer Python-UDF, für die ich eine externe Bibliothek "User-Agenten" brauche, transformieren. Mein UDF ohne die Verwendung der externen Bibliothek funktioniert gut. Aber ich bin nicht in der Lage, Dinge zum Laufen zu bringen, wenn ich sie benutzen will.Wie externe Bibliothek in Python-UDF auf Hive verwenden?

Ich habe versucht, die Bibliothek mit dem unten angegebenen Code selbst zu installieren.

import sys 
import subprocess 
import pip 
import os 



sys.stdout = open(os.devnull, 'w+') 
pip.main(['install', '--user', 'pyyaml']) 
pip.main(['install', '--user', 'ua-parser']) 
pip.main(['install', '--user', 'user-agents']) 
sys.stdout = sys.__stdout__ 

und danach habe ich versucht, dieses

import user_agents 

aber die UDF ist mit einer Ausnahme „Kein Modul gefunden“ abstürzt. Ich habe auch versucht, die folgenden Pfade durch den Code zu überprüfen:

/usr/local/lib/python2.7/site-packages 
/usr/local/lib64/python2.7/site-packages 

Aber keine user_agents Modul war da. Irgendwelche Hilfe, wie es funktioniert, damit die Dinge funktionieren? Würde es wirklich zu schätzen wissen. Vielen Dank !

Antwort

1

Ich habe einen Ausweg gefunden. Für diejenigen, die das gleiche UDF-Problem lösen und noch nicht erfolgreich sind, können Sie diese Lösung ausprobieren und prüfen, ob sie auch für sie funktioniert.

Für externe Bibliotheken, die folgenden Schritte aus:

Schritt 1: Kraft pip die externe Bibliothek durch den Code selbst zum aktuellen Arbeitsverzeichnis Ihrer UDF zu installieren.

import sys 
import os 
import pip 

sys.stdout = open(os.devnull, 'w+') 
pip.main(['install', 'user-agents', '-t', os.getcwd(), '--ignore-installed']) 
sys.stdout = sys.__stdout__ 

Schritt 2: Aktualisieren Sie Ihre sys.path

sys.path.append(os.getcwd()) 

Schritt 3: Importieren Sie nun die Bibliothek :)

from user_agents import parse 

Das ist es. Bitte überprüfen und bestätigen Sie, dass dies auch für Sie funktioniert.

Verwandte Themen