Является ли spark.read.text действием?

#apache-spark #apache-zeppelin

#apache-spark #apache-zeppelin

Вопрос:

Является ли spark.read.text действием Spark или преобразованием?

Я понимаю, что это преобразование. Но тогда почему в моем блокноте Zeppelin это занимает 3 минуты 25 секунд?

 val dump = spark.read.text(s"s3://redacted/*/*").as[String].filter(_.nonEmpty)
 

В этом конвейере нет действий, только преобразования. Эта ячейка моей записной книжки Apache Zeppelin должна выполняться мгновенно. Это потому, что он перечисляет все файлы в моей корзине S3?

Для контекста: версия Spark = 3.0.0-amzn-0, версия Zeppelin 0.9.0-предварительный просмотр1.

Ответ №1:

Это не является ни действием, ни преобразованием.

Spark использует «ленивую» оценку, и поэтому чтение не может быть похоже на «сохранить», действие. фильтр — это преобразование.

Spark также с Catalyst (DFs и т.д.) запускает некоторую подводную оптимизацию в определенных случаях.

Я побежал, чтобы обновить некоторый код в расположениях Databricks S3. Имейте в виду, что есть проблемы со скоростью для S3, и это не posix-подобная файловая система с быстрым поиском местоположений.

Это val dump = spark.read.text("/mnt/training/*.csv") выполняется в один миг, и задание не инициируется.

Это val dump = spark.read.text("/mnt/training/") генерирует задание со следующим описанием:

 Listing leaf files and directories for 58 paths:
dbfs:/mnt/training/301, ...
 

Этот последний похож на ваш …/* /*.

Поскольку S3 работает медленно, что-то запускается, чтобы найти уже указанные вами местоположения файлов (которые вы указали), чтобы компенсировать медлительность, и поскольку вы находитесь в синхронном режиме, вам нужно подождать.

Проза в Интернете о действии и преобразовании в целом основана на RDDs, но с внедрением DFs и DSs ситуация изменилась.

Тем не менее чтение не может рассматриваться как действие, и я уверен, что фильтр еще не применен. Я не вижу входящих и исходящих байтов в пользовательском интерфейсе Spark.

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

1. Это не кажется «ленивым», поскольку выполнение этой строки занимает более 3 минут. Похоже, что Spark фактически считывает все файлы S3 в моем ведре. Что странно, потому что я ожидаю, что он будет читать файлы только тогда, когда какое-то действие выполняется по строке.