#python #hdfs
Вопрос:
У меня есть csv-файл, расположенный в hdfs на удаленном сервере. Я хочу прочитать csv-файл в фрейм данных pandas с помощью insecureclient, однако я продолжаю получать сообщение об ошибке
1-я попытка: код:
from hdfs import InsecureClient
client_hdfs = InsecureClient('hdfs://host:port', user=user)
with client_hdfs.read('path/to/csv.csv') as reader:
print(reader)
ошибка:
Недопустимая схема: Не найдено адаптеров подключения для «хост:порт:путь/к/csv.csv»
Я проверил правильность пути, запустив «путь hdfs-ls/к/csv.csv» на сервере и просмотрев файл там, и получил имя хоста, запустив «uname-n» на сервере.
2-я попытка (создал новый тестовый файл с содержимым «это тестовый файл», поместил его в то же расположение hdfs и попытался прочитать):
from pyspark import SparkContext, SparkConf
conf = SparkConf().setAppName("myFirstApp").setMaster("local")
sc = SparkContext(conf=conf)
path = "hdfs://host:port/path/to/textfile.txt"
df = sc.textFile(path)
df.first()
Ошибка:
выполняется бесконечно, никогда не возвращая результат
Комментарии:
1. Почему бы не использовать pyspark?
2. Вы пробовали заменить
hdfs://
наhttp://
?3. @MattL. если я это сделаю, это просто выдаст ошибку тайм-аута
Ответ №1:
Используемый вами модуль подключается к WebHDFS (по http
протоколу), а не к порту именного кода HDFS ( hdfs://
протокол)
Документы — https://hdfscli.readthedocs.io/en/latest/quickstart.html#instantiating-a-client
PySpark, с другой стороны, позволяет подключаться по hdfs://
Вы должны использовать фреймы данных Spark, а не Панды напрямую — https://databricks.com/blog/2021/10/04/pandas-api-on-upcoming-apache-spark-3-2.html
Комментарии:
1. Отредактированный ответ, чтобы включить попытку pyspark
2. Для меня это прекрасно работает. Вы уверены, что используете правильный хост/порт? Вам нужно использовать локальный мастер, если у вас есть кластер Hadoop (который будет включать YARN)?
3. можете ли вы подтвердить, что вы запустили код pyspark точно так, как у меня, и он действительно работал для вас?
4. Я имею в виду, что я использую реальную конечную точку HDFS и свой порт namenode, и да, он отлично работает на моем Mac
5. похоже, на моей стороне была проблема с брандмауэром.