Файловая система Databricks — %sh ls vs %fs ls

#filesystems #databricks

Вопрос:

У меня есть несколько файлов, расположенных внутри %sh ls , и я хотел бы переместить эти файлы в файловую систему баз данных (сделать их видимыми внутри %fs ls ).

Кто-нибудь из вас знает , в чем разница между %sh ls и %fs ls , и как мне перемещать файлы между ними?

Я знаю, что мы можем использовать dbutils.fs.cp для перемещения файлов, которые уже находятся в %fs ls нужном месте.

Любая помощь или указания приветствуются.

Ответ №1:

когда вы выполняете команды через %sh , они выполняются только на узле драйвера и отображают содержимое на этой машине. Когда вы это делаете %fs ls , он по умолчанию показывает содержимое DBFS (файловой системы Databricks), но он также может отображать локальное содержимое, если вы добавите file:// префикс к пути.

Вы можете копировать или перемещать файлы файлы следующим образом:

  1. Использование dbutils.fs.cp("file:///local-path", "dbfs-path") (или dbutils.fs.mv )
  2. Используя так называемое крепление предохранителя, которое монтирует DBFS на локальные машины — вам нужно добавить /dbfs/ префикс к пути, который вы хотите иметь в DBFS, например /dbfs/FileStore/.... (если вы используете Community edition с DBR >= 7.x, то это может не сработать, поэтому у вас есть только первый метод)

P.S. Более подробную информацию вы можете найти в документации.

Комментарии:

1. еще один отличный ответ. есть какие-нибудь намеки на то, где находятся файлы репо (DevOps)? в настоящее время я использую %sh и не могу их видеть

2. если вы говорите о файлах репозиториев, то они находятся в самой рабочей области, это не настоящие файлы.

3. ах, теперь я лучше понимаю ваши предыдущие комментарии. рад видеть, какие функции используются в этом случае использования; import from my_module будет очень полезно.