Problema durante il tentativo di leggere un file di testo in databricks Locali, File API piuttosto che Scintilla API

0

Domanda

Sto cercando di leggere un piccolo file txt che viene aggiunto come una tabella predefinita db su Databricks. Durante il tentativo di leggere il file utilizzando il File API, ho un FileNotFoundErrorma io sono in grado di leggere lo stesso file come Scintilla RDA utilizzando SparkContext.

Si prega di trovare il codice riportato di seguito:

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

Questo mi dà l'errore:

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'

Dove, come, non ho alcun problema a leggere il file utilizzando SparkContext:

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

E come previsto, ho ottenere il risultato di cui sopra il blocco di codice:

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

Sono stato anche in riferimento all' DBFS documentazione qui per capire Locale del File API limiti, ma non portare la questione. Qualsiasi aiuto sarebbe molto apprezzato. Grazie!

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

Il problema è che stai usando open una funzione che funziona solo con i file locali, e non sa nulla DBFS, o altri file system. Per ottenere questo lavoro, è necessario utilizzare DBFS locali API file e aggiungere il /dbfs prefisso percorso file: /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

In alternativa, si può semplicemente utilizzare il built-in csv metodo:

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

In alternativa possiamo utilizzare dbutils

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

Esempio ,

enter image description here

2021-11-24 18:26:17

In altre lingue

Questa pagina è in altre lingue

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