Problém pri pokuse o čítanie textových súborov v databricks pomocou Local File API, skôr ako Iskra API

0

Otázka

Snažím sa čítať malý súbor txt, ktorý je pridaný ako tabuľku na predvolené db na Databricks. Zatiaľ čo sa snaží čítať súbor cez Local File API, dostanem FileNotFoundError,, ale ja som schopný prečítať istého súboru ako Iskra RDD pomocou SparkContext.

Nájdete nižšie uvedený kód:

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

To dáva mi chybu:

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'

Kde, ako, nemám problém čítanie súboru pomocou SparkContext:

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

A tak, ako sa očakáva, dostanem výsledok pre vyššie blok kód:

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

Bol som aj s odkazom na DBFS dokumentácia tu, aby pochopili Local File API obmedzenia, ale žiadne olovo na problém. Akákoľvek pomoc bude s vďačnosťou prijatá. Vďaka!

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

Problém je, že používate open funkcia, ktorá pracuje iba s lokálnym súborom, a nevie nič o DBFS, alebo iné súborové systémy. Na získanie tejto práci, budete musieť použiť DBFS local file API a append /dbfs prefix na cestu súboru: /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

Prípadne môžete jednoducho použiť vstavaný csv metóda:

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

Alternatívne môžeme použiť dbutils

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

Napríklad ,

enter image description here

2021-11-24 18:26:17

V iných jazykoch

Táto stránka je v iných jazykoch

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