Problém, a zároveň se snaží číst textový soubor v databricks pomocí Místního Souboru API je spíše než Spark API

0

Otázka

Snažím se číst malý txt soubor, který je přidána jako stole v výchozí db na Databricks. Při pokusu o čtení souboru pomocí Místního Souboru API, dostanu FileNotFoundError, ale jsem schopen číst stejný soubor jako Jiskra RDD pomocí SparkContext.

Prosím, najít kód níže:

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

To mi dává 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, jak, nemám problém při čtení souboru pomocí SparkContext:

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

A jak se dalo očekávat, jsem si výsledek pro výše uvedený blok kódu:

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

Byl jsem také s odkazem na DBFS dokumentace zde pochopit Místní Soubor API omezení, ale ne vést o této otázce. Jakýkoliv pomoci chtěl bych být ocenil. Díky!!!

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

Problém je, že používáte open funkce, která pracuje pouze s lokální soubory, a neví nic o DBFS, nebo jiné souborové systémy. Aby si tuto práci, musíte použít DBFS místní soubor API a připojit /dbfs prefix cesta k souboru: /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

Alternativně můžete jednoduše použít vestavěný-v csv metoda:

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

Alternativně můžeme použít dbutils

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

Příklad ,

enter image description here

2021-11-24 18:26:17

V jiných jazycích

Tato stránka je v jiných jazycích

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