Есть ли способ прочитать csv-файл в hdfs в фрейм данных python с помощью insecureclient в записной книжке jupyter?

#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. похоже, на моей стороне была проблема с брандмауэром.