PySpark не может переместить файл из локального в HDFS

#python #hadoop #hdfs

Вопрос:

Я запускаю hadoop на своем локальном компьютере на порту 8020. Узлы с моим именем существуют в разделе путь /usr/local/Cellar/hadoop/hdfs/tmp/dfs/name . Я настроил проект PySpark с помощью Conda env и установил зависимости pyspark и hdfs3.

Ниже приведен мой код:

 from pyspark.sql import SparkSession
from hdfs3 import HDFileSystem

spark = SparkSession.builder.appName('First Project').getOrCreate()

hdfs = HDFileSystem(host="localhost", port=8020)
hdfs.put("test.csv", "/usr/local/Cellar/hadoop/hdfs/tmp/dfs/name/test.csv")
 

Я пытаюсь скопировать файл из моей локальной файловой системы в HDFS, но получаю следующую ошибку:

 OSError: Could not open file: /usr/local/Cellar/hadoop/hdfs/tmp/dfs/name/test.csv, mode: wb Parent directory doesn't exist: /usr/local/Cellar/hadoop/hdfs/tmp/dfs/name
 

Но я могу вставить компакт — диск в тот же каталог, и он существует. Я не уверен, почему я получаю эту ошибку.

Кроме того, когда я пытаюсь сделать hdfs.mv с теми же параметрами я получаю следующую ошибку:

 FileNotFoundError: test.csv
 

Комментарии:

1. hdfs3 не имеет никакого отношения к искре. Вы также не должны помещать свой каталог данных DFS в путь homebrew

Ответ №1:

Если вы хотите загрузить локальный CSV с помощью Spark, вам нужно будет использовать Spark

 spark = SparkSession.builder.getOrCreate()

df = spark.read.csv('file:///path/to/file.csv')
df.write.csv(output_path)
 

В противном случае вы не сможете «поместить» в свое местоположение Homebrew, поскольку его нет в HDFS (по крайней мере, если вы не запустили hadoop fs mkdir -p /usr/local/Cellar/... по какой-либо причине)

когда я пытаюсь сделать hdfs.mv с теми же параметрами … Файлообменник

Потому что сначала вам нужно перейти cd в каталог с локальным CSV. В противном случае укажите полный путь