По умолчанию для структурированной потоковой передачи из файловых источников требуется указать схему, а не полагаться на Spark для ее автоматического вывода.Это ограничение гарантирует, что согласованная схема будет использоваться для потокового запроса даже в случае сбоев.Для специальных случаев использования вы можете повторно включить вывод схемы, установив для spark.sql.streaming.schemaInference значение true.
Источник: https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#schema-inference-and-partition-of-streaming-dataframesdatasets
В общем Iсказал бы, что плохая идея полагаться на вывод схемы при пакетных заданиях в производительной среде.
Во-первых, это сложный процесс, который будет занимать время вычислений.
Во-вторых, независимо от того, какую обработку вы будете выполнятьпытаясь сделать на ваших данных, вы наверняка будете предполагать какую-то схему.Таким образом, почему бы не применять его с самого начала и дать сбой, как только данные не соответствуют вашим предположениям.
Вывод схемы отлично подходит для исследовательского тестирования данных в интерактивной среде (например, искраshell) , чтобы дать вам представление о том, как составляются данные и что вы можете с ними делать.
В таком случае я сомневаюсь, что вам понадобится потоковая передача, если только вы тоже не тестируете эту функцию - если этоcase (и, учитывая, что я уверен, что это путь) вы можете использовать вышеуказанную настройку.
Тем не менее, я бы предложил использовать Datasets вместо DataFrames (и Scala вместо Java ) для обеспечения безопасности типов, таким образом вы можете создать case class
для представления вашегоданные и получить схему из него - однако, это только мое личное предпочтение и мнение.