#apache-spark #pyspark #databricks #sparkapi
Вопрос:
Я пытаюсь прочитать небольшой текстовый файл, который добавляется в виде таблицы в базу данных по умолчанию в Databricks. При попытке прочитать файл через Local File API я получаю FileNotFoundError
, но я могу прочитать тот же файл, что и Spark RDD, используя SparkContext.
Пожалуйста, найдите код ниже:
with open("/FileStore/tables/boringwords.txt", "r") as f_read:
for line in f_read:
print(line)
Это дает мне ошибку:
FileNotFoundError Traceback (most recent call last)
<command-2618449717515592> in <module>
----> 1 with open("dbfs:/FileStore/tables/boringwords.txt", "r") as f_read:
2 for line in f_read:
3 print(line)
FileNotFoundError: [Errno 2] No such file or directory: 'dbfs:/FileStore/tables/boringwords.txt'
Где как, у меня нет проблем с чтением файла с помощью SparkContext:
boring_words = sc.textFile("/FileStore/tables/boringwords.txt")
set(i.strip() for i in boring_words.collect())
И, как и ожидалось, я получаю результат для приведенного выше блока кода:
Out[4]: {'mad',
'mobile',
'filename',
'circle',
'cookies',
'immigration',
'anticipated',
'editorials',
'review'}
Я также ссылался на документацию DBFS здесь, чтобы понять ограничения локального файлового API, но не смог разобраться в этой проблеме.
Любая помощь будет принята с благодарностью. Спасибо!
Ответ №1:
Проблема в том, что вы используете open
функцию, которая работает только с локальными файлами и ничего не знает о DBFS или других файловых системах. Чтобы это сработало, вам нужно использовать DBFS local file API и добавить /dbfs
префикс к пути к файлу: /dbfs/FileStore/....
:
with open("/dbfs/FileStore/tables/boringwords.txt", "r") as f_read:
for line in f_read:
print(line)
Ответ №2:
В качестве альтернативы вы можете просто использовать встроенный метод csv:
df = spark.read.csv("dbfs:/FileStore/tables/boringwords.txt")