Обработка данных для обработки искр требует знания схемы. При работе с источниками данных с гибкой и/или неизвестной схемой, прежде чем Spark сможет что-либо сделать с данными, он должен открыть свою схему. Это то, что делает load()
. Он рассматривает данные только с целью обнаружения схемы data
. Когда вы выполняете действие на data
, например, collect()
, Spark фактически прочитает данные для целей обработки.
Существует только один способ радикально ускорить load()
, и это путем предоставления схемы самостоятельно и, таким образом, устранения необходимости обнаружения схемы. Вот пример, взятый из the library documentation:
import org.apache.spark.sql.types._
val schemaMongo = StructType(StructField("name", StringType, true) :: StructField("age", IntegerType, true) :: Nil)
val df = sqlContext.read.schema(schemaMongo).format("com.stratio.datasource.mongodb").options(Map("host" -> "localhost:27017", "database" -> "highschool", "collection" -> "students")).load
Вы можете получить небольшой выигрыш путем отбора проб лишь часть документов в коллекции, установив параметр schema_samplingRatio
конфигурации на значение меньше 1.0
по умолчанию. Однако, поскольку у Mongo нет встроенной выборки, вы все равно будете получать доступ к потенциально большому количеству данных.