Как переместить файл с локального сервера на hdfs?

У меня есть файл на моем сервере по адресу

/user/data/abc.csv

Мне нужно создать таблицу кустов поверх этих данных в файле. Поэтому мне нужно переместить этот файл в папку hdfs.

/user/hive/warehouse/xyz.db

Как мы можем это сделать с помощью Python?

stackoverflow.com/a/51548097/2308683
OneCricketeer 10.08.2018 00:12

Вы можете использовать PySpark для чтения локального файла и записи в таблицу Hive.

OneCricketeer 10.08.2018 00:12

@ cricket_007 Я хочу реализовать это с помощью pyspark, я планирую создать таблицу улья поверх моего файла. По этой причине я хочу переместить его со своего сервера в расположение hdfs. Я могу написать команду оболочки -copyFromLocal, но я хочу сделать это с помощью python в pyspark. Как мне это сделать?

Aakib 11.08.2018 02:53

Опять же, см. Первую ссылку ... Большой длинный список библиотек Python для взаимодействия с HDFS. Однако saveAsTable отлично работает в PySpark, поэтому я спрашиваю - что вы пробовали? Какие ошибки вы получаете?

OneCricketeer 11.08.2018 05:40

Вещи, которые я пробовал 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')

Aakib 11.08.2018 20:39

'shutil` не может получить доступ к путям HDFS. Первый правильный, если предположить, что команда hdfs находится в вашей ОС PATH, но, опять же, вы не пробовали Spark?

OneCricketeer 12.08.2018 00:44

@ cricket_007 Я пишу этот код после запуска моего движка pyspark.

Aakib 12.08.2018 03:52

Ни подпроцесс, ни shutil не используют контекст Spark ... Как я уже упоминал, вы хотите использовать функцию saveAsTable из Spark

OneCricketeer 12.08.2018 17:10
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
8
1 538
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сначала вам нужно получить файл с сервера. Используйте этот код 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, чтобы скопировать мой файл.

Aakib 11.08.2018 02:54

Команда hadoop fs -put может использоваться для помещения файла из локальной файловой системы в HDFS.

Я думаю, вы пропустили часть вопроса об использовании Python.

OneCricketeer 14.08.2018 15:32

Другие вопросы по теме