Problema ao tentar ler um arquivo de texto em databricks usando o Local do Arquivo API em vez de Faísca API

0

Pergunta

Eu estou tentando ler um pequeno arquivo txt que é adicionado como uma tabela para o padrão de banco de dados em Databricks. Ao tentar ler o arquivo via API de Arquivo, recebo um FileNotFoundError, mas eu sou capaz de ler o mesmo arquivo como Faísca RDD usando SparkContext.

Por favor, encontrar o código abaixo:

with open("/FileStore/tables/boringwords.txt", "r") as f_read:
  for line in f_read:
    print(line)

Isto dá-me o erro:

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'

Onde, como, eu não tenho nenhum problema de leitura do arquivo usando SparkContext:

boring_words = sc.textFile("/FileStore/tables/boringwords.txt")
set(i.strip() for i in boring_words.collect())

E, como esperado, eu obter o resultado acima, o bloco de código:

Out[4]: {'mad',
 'mobile',
 'filename',
 'circle',
 'cookies',
 'immigration',
 'anticipated',
 'editorials',
 'review'}

Eu também estava se referindo a DBFS documentação aqui para entender o Local do Arquivo API limitações, mas não têm qualquer vantagem sobre o problema. Qualquer ajuda seria muito apreciada. Obrigado!

apache-spark databricks pyspark sparkapi
2021-11-24 06:16:55
3
0

O problema é que você está usando o open função que funciona apenas com arquivos locais, e não sabe nada sobre DBFS, ou outros sistemas de arquivos. Para obter esse trabalho, você precisa usar DBFS local API de arquivo e acrescentar o /dbfs prefixo para o caminho do arquivo: /dbfs/FileStore/....:

with open("/dbfs/FileStore/tables/boringwords.txt", "r") as f_read:
  for line in f_read:
    print(line)
2021-11-24 07:56:14
0

Alternativamente, você pode simplesmente usar o built-in csv método:

df = spark.read.csv("dbfs:/FileStore/tables/boringwords.txt")
2021-11-24 08:51:27
0

Como alternativa, podemos usar dbutils

files = dbutils.fs.ls('/FileStore/tables/')
li = []
for fi in files: 
  print(fi.path)

Exemplo ,

enter image description here

2021-11-24 18:26:17

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................