У меня есть файл на моем сервере по адресу
/user/data/abc.csv
Мне нужно создать таблицу кустов поверх этих данных в файле. Поэтому мне нужно переместить этот файл в папку hdfs.
/user/hive/warehouse/xyz.db
Как мы можем это сделать с помощью Python?
Вы можете использовать PySpark для чтения локального файла и записи в таблицу Hive.
@ cricket_007 Я хочу реализовать это с помощью pyspark, я планирую создать таблицу улья поверх моего файла. По этой причине я хочу переместить его со своего сервера в расположение hdfs. Я могу написать команду оболочки -copyFromLocal, но я хочу сделать это с помощью python в pyspark. Как мне это сделать?
Опять же, см. Первую ссылку ... Большой длинный список библиотек Python для взаимодействия с HDFS. Однако saveAsTable
отлично работает в PySpark, поэтому я спрашиваю - что вы пробовали? Какие ошибки вы получаете?
Вещи, которые я пробовал subprocess.call (['hdfs', 'dfs', '-copyFromLocal', '/u/data/abc.csv', 'hdfs: //user/hive/warehouse/class.db/abc. csv '], shell = True) Ошибка: не указан псевдоним и не найден псевдоним по умолчанию. 1 2-я попытка: shutil.copy ('/ user / adam / data // abc.csv', 'hdfs: //user/hive/warehouse/class.db/class/abc.csv')
'shutil` не может получить доступ к путям HDFS. Первый правильный, если предположить, что команда hdfs
находится в вашей ОС PATH
, но, опять же, вы не пробовали Spark?
@ cricket_007 Я пишу этот код после запуска моего движка pyspark.
Ни подпроцесс, ни shutil не используют контекст Spark ... Как я уже упоминал, вы хотите использовать функцию saveAsTable
из Spark
Сначала вам нужно получить файл с сервера. Используйте этот код pyhton, чтобы получить его на свой локальный компьютер.
import ftplib
path = '/user/data/'
filename = 'abc.csv'
ftp = ftplib.FTP("Server IP")
ftp.login("UserName", "Password")
ftp.cwd(path)
ftp.retrbinary("RETR " + filename ,open(filename, 'wb').write) #Download the file from server to local on same path.
ftp.quit()
После того, как файл загружен на локальный компьютер, выполните обычный запрос куста, чтобы загрузить данные с локального компьютера или поместить данные в HDFS, а затем загрузить в куст.
Загрузить данные прямо из локального хранилища в улей:
LOAD DATA local INPATH '/user/data/abc.csv' into table <table name>;
Загрузить данные в HDFS:
hadoop fs -copyFromLocal ~/user/data/abc.csv /your/hdfs/path
затем загрузите его в куст с помощью запроса улья.
LOAD DATA INPATH '/your/hdfs/path' into table <table name>;
Я не хочу писать команды оболочки, я в пределах pyspark. Поэтому мне нужен код Python, чтобы скопировать мой файл.
Команда hadoop fs -put может использоваться для помещения файла из локальной файловой системы в HDFS.
Я думаю, вы пропустили часть вопроса об использовании Python.