Spark API'sı yerine Yerel Dosya API'lerini kullanarak databricks'te bir metin dosyasını okumaya çalışırken sorun

0

Soru

Databricks'te varsayılan db'ye tablo olarak eklenen küçük bir txt dosyasını okumaya çalışıyorum. Dosyayı Yerel Dosya API'sı üzerinden okumaya çalışırken, bir FileNotFoundError Ancak SparkContext kullanarak Spark RDD ile aynı dosyayı okuyabiliyorum.

Lütfen aşağıdaki kodu bulun:

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

Bu bana hatayı veriyor:

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'

Nerede olduğu gibi, SparkContext kullanarak dosyayı okumakta sorun yaşamıyorum:

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

Ve beklendiği gibi, yukarıdaki kod bloğu için sonucu alıyorum:

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

Yerel Dosya apı'sinin sınırlamalarını anlamak için DBFS belgelerine de atıfta bulunuyordum, ancak konuyla ilgili hiçbir ipucu yoktu. Herhangi bir yardım çok takdir edilecektir. Teşekkürler!

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

Sorun şu ki, kullandığınız open yalnızca yerel dosyalarla çalışan ve DBFS veya diğer dosya sistemleri hakkında hiçbir şey bilmeyen işlev. Bunun çalışması için DBFS yerel dosya API'sini kullanmanız ve /dbfs dosya yoluna önek: /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

Alternatif olarak, yerleşik csv yöntemini de kullanabilirsiniz:

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

Alternatif olarak şunları kullanabiliriz dbutils

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

Örnek ,

enter image description here

2021-11-24 18:26:17

Diğer dillerde

Bu sayfa diğer dillerde

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