Опции чтения

Мультикластерное чтение

По умолчанию, расчет обращается к данным на кластере, который предоставляет вычислительные мощности (при запуске напрямую или при использовании Standalone кластера). При этом SPYT поднимает собственные RPC прокси для разгрузки общих кластерных прокси.

В версии 2.2.0 появилась возможность чтения данных с разных кластеров YTsaurus. Для этого необходимо явно указать адрес кластера в пути к таблице.

spark.read.yt('<cluster="localhost:8000">//home/table').show() # Таблица на кластере localhost:8000

spark.read.yt('//home/table').show() # Таблица на домашнем кластере

Примечание

Чтение с других кластеров YTsaurus происходит через общие прокси, что может вызывать большую нагрузку на них при высоких объемах данных.

schema_hint

Жесткое указание типа колонки. Полезно в случае, когда колонка имеет тип any (сериализованный в yson сложный тип).
Значение будет десериализовано в указанный тип.

Пример на Python:

spark.read.schema_hint({"value": MapType(StringType(), LongType())}).yt("//sys/spark/examples/example_yson")

Пример на Scala:

df.write
    .schemaHint(Map("a" ->
        YtLogicalType.VariantOverTuple(Seq(
          (YtLogicalType.String, Metadata.empty), (YtLogicalType.Double, Metadata.empty)))))
    .yt(tmpPath)

transaction

Чтение под транзакцией. Подробнее можно узнать в разделе Чтение и запись под транзакцией.

Пример на Scala:

val transaction = YtWrapper.createTransaction(None, 10 minute)
df.write.transaction(transaction.getId.toString).yt(tmpPath)
transaction.commit().get(10, TimeUnit.SECONDS)

Schema v3

Чтение таблиц со схемой в формате type_v3 вместо type_v1. Настраивается в Spark конфигурации или опции записи.

Python example:

spark.read.option("parsing_type_v3", "true").yt("//sys/spark/examples/example_yson")

readParallelism

Настройка целевого числа партиций при чтении таблицы. Определяет максимальный размер партиции как totalBytes / readParallelism, тем самым устанавливая количество Spark‑тасков при чтении.

Python example:

spark.read.option("readParallelism", "5").yt("//home/table")

recursiveFileLookup

Опция управляет порядком обхода файловой структуры при чтении данных. Она определяет, будет ли система рекурсивно спускаться во вложенные директории.

Опция может принимать значения:

  • true — система рекурсивно обходит все поддиректории от указанной точки и находит все файлы, которые лежат внутри дерева;
  • false — система не спускается рекурсивно в поддиректории и читает только файлы, которые лежат в указанной директории.

В Apache Spark при чтении данных из HDFS и S3 опция recursiveFileLookup установлена по умолчанию в false. В SPYT значение по умолчанию — true. Это сделано для единообразия с поведением YQL и CHYT.

Установите опцию в false, если читаете данные с Hive‑совместимой схемой партиционирования по директориям в Кипарисе. В таком случае достаточно обработать только файлы верхнего уровня — рекурсивный обход не требуется.

Например, для структуры директорий:

home
├── table
│   ├── dt=2026-01-01
│   ├── dt=2026-01-02
│   ├── dt=2026-01-03
│   └── dt=2026-01-04
│   ...

Пример кода Python будет таким:

df = spark.read.option("recursiveFileLookup", "false").yt("//home/table")
df.printSchema()
...
root
 |-- id: long (nullable = false)
 |-- value: long (nullable = false)
 ...
 |-- dt: string (nullable = false)