Die Spark-Datenframeverarbeitung erfordert Schemawissen. Beim Arbeiten mit Datenquellen mit flexiblem und/oder unbekanntem Schema, bevor Spark mit den Daten etwas anfangen kann, muss es sein Schema erkennen. Dies ist, was load()
tut. Es betrachtet die Daten nur zu dem Zweck, das Schema von data
zu ermitteln. Wenn Sie eine Aktion auf data
ausführen, z. B. collect()
, wird Spark tatsächlich die Daten für Verarbeitungszwecke lesen.
Es gibt nur eine Möglichkeit, load()
radikal zu beschleunigen, und zwar indem Sie das Schema selbst bereitstellen und somit die Notwendigkeit einer Schemaerkennung umgehen. Hier ist ein Beispiel aus 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
Sie können eine leichte Verstärkung erhalten durch Abtasten nur einen Bruchteil der Dokumente in der Sammlung durch Einstellen der schema_samplingRatio
Konfigurationsparameter auf einen Wert kleiner als der 1.0
Standard. Da Mongo jedoch keine integrierten Stichproben enthält, können Sie immer noch auf eine Vielzahl von Daten zugreifen.