spark-dataframeAan de slag met spark-dataframe


Opmerkingen

Deze sectie geeft een overzicht van wat spark-dataframe is en waarom een ontwikkelaar het misschien wil gebruiken.

Het moet ook alle grote onderwerpen binnen spark-dataframe vermelden en een link naar de gerelateerde onderwerpen bevatten. Aangezien de documentatie voor spark-dataframe nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken.

Installatie of instellingen

Gedetailleerde instructies voor het instellen of installeren van spark-dataframe.

Gegevens laden in een DataFrame

In Spark (scala) kunnen we onze gegevens op verschillende manieren in een DataFrame plaatsen, elk voor verschillende gebruikssituaties.

Maak DataFrame van CSV

De eenvoudigste manier om gegevens in een DataFrame te laden, is om deze vanuit een CSV-bestand te laden. Een voorbeeld hiervan (afkomstig uit de officiële documentatie ) is:

import org.apache.spark.sql.SQLContext

val sqlContext = new SQLContext(sc)
val df = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "true") // Use first line of all files as header
    .option("inferSchema", "true") // Automatically infer data types
    .load("cars.csv")
 

Maak impliciet dataframe vanuit RDD

In vonktoepassingen hebben we vaak gegevens in een RDD, maar we moeten deze omzetten in een DataFrame. De eenvoudigste manier om dit te doen, is de .toDF() functie .toDF() te gebruiken, die impliciet de gegevenstypen voor ons DataFrame bepaalt:

val data = List(
   ("John", "Smith", 30), 
   ("Jane", "Doe", 25)
)

val rdd = sc.parallelize(data)

val df = rdd.toDF("firstname", "surname", "age")
 

Maak DataFrame expliciet vanuit RDD

In sommige scenario's is het gebruik van de .toDF() -benadering niet het beste idee, omdat we het schema van ons DataFrame expliciet moeten definiëren. Dit kan worden bereikt met behulp van een StructType met een array van StructField.

import org.apache.spark.sql.types._
import org.apache.spark.sql.Row

val data = List(
   Array("John", "Smith", 30), 
   Array("Jane", "Doe", 25)
)

val rdd = sc.parallelize(data)

val schema = StructType(
   Array(
      StructField("firstname", StringType,  true),
      StructField("surname",   StringType,  false),
      StructField("age",       IntegerType, true)
   )
)

val rowRDD = rdd.map(arr => Row(arr : _*))

val df = sqlContext.createDataFrame(rowRDD, schema)