Pyspark - ошибка при копировании файлов из локального (пограничного узла) в расположение HDFS - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь скопировать файлы из локальной папки в папку HDFS в pyspark, используя следующий код.

sc = SparkSession.builder.appName("HDFSPySparkRead").getOrCreate()
sparkCont = sc.sparkContext
URI           = sparkCont._jvm.java.net.URI
Path          = sparkCont._jvm.org.apache.hadoop.fs.Path
FileSystem    = sparkCont._jvm.org.apache.hadoop.fs.FileSystem
Configuration = sparkCont._jvm.org.apache.hadoop.conf.Configuration


fs = FileSystem.get(URI("hdfs://gcgmwdcuat:8020"), Configuration())
fs.copyFromLocalFile('/home/ak18191/ar_new.txt', 'hdfs://gcgmwdcuat:8020/user/ak18191/')

Ошибка получения:

py4j.Py4JException: метод copyFromLocalFile ([class java .lang.String, класс java .lang.String]) не существует

Я также пробовал ниже код

import subprocess
cmd = 'hdfs dfs -put -f /home/ak18191/ar_new.txt hdfs://gcgmwdcuat:8020/user/ak18191/'
subprocess.call(cmd)

Но при получении файла не найдена ошибка , Команда успешно выполняется в spark-shell. Пожалуйста, помогите!

Ответы [ 2 ]

1 голос
/ 10 марта 2020

copyFromLocalFile принимает два объекта Path, а не строки

https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/fs/FileSystem.html

1 голос
/ 10 марта 2020

Удалите параметр -f:

import subprocess
cmd = 'hdfs dfs -put /home/ak18191/ar_new.txt hdfs://gcgmwdcuat:8020/user/ak18191/'
subprocess.call(cmd)

Если файл все еще не найден, убедитесь, что вы правильно ввели имя файла, выполнив на компьютере следующую команду:
hdfs dfs -ls /home/ak18191/ar_new.txt

https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#put

...