Ricerca…


introduzione

Un DataFrame è un'astrazione di dati organizzati in righe e colonne digitate. È simile ai dati trovati nei database relazionali basati su SQL. Sebbene sia stato trasformato in un alias di tipo solo per Dataset [Row] in Spark 2.0, è ancora ampiamente utilizzato e utile per le pipeline di elaborazione complesse che fanno uso della flessibilità dello schema e delle operazioni basate su SQL.

Creazione di DataFrames in Scala

Esistono molti modi per creare DataFrames. Possono essere creati da elenchi locali, RDD distribuiti o lettura da origini dati.

Utilizzo di toDF

Importando gli impliciti di spark sql, è possibile creare un DataFrame da un Seq locale, Array o RDD, purché i contenuti siano di un sottotipo di prodotto (le tuple e le classi di casi sono esempi noti di sottotipi di prodotto). Per esempio:

import sqlContext.implicits._
val df = Seq(
  (1, "First Value", java.sql.Date.valueOf("2010-01-01")),
  (2, "Second Value", java.sql.Date.valueOf("2010-02-01"))
).toDF("int_column", "string_column", "date_column")

Utilizzando createDataFrame

Un'altra opzione è l'utilizzo del metodo createDataFrame presente in SQLcontext. Questa opzione consente anche la creazione da elenchi locali o RDD di sottotipi di prodotti come con toDF , ma i nomi delle colonne non sono impostati nello stesso passo. Per esempio:

val df1 = sqlContext.createDataFrame(Seq(
  (1, "First Value", java.sql.Date.valueOf("2010-01-01")),
  (2, "Second Value", java.sql.Date.valueOf("2010-02-01"))
))

Inoltre, questo approccio consente la creazione da RDD di istanze Row , purché un parametro schema sia passato per la definizione dello schema di DataFrame risultante. Esempio:

import org.apache.spark.sql.types._
val schema = StructType(List(
    StructField("integer_column", IntegerType, nullable = false),
    StructField("string_column", StringType, nullable = true),
    StructField("date_column", DateType, nullable = true)
))

val rdd = sc.parallelize(Seq(
  Row(1, "First Value", java.sql.Date.valueOf("2010-01-01")),
  Row(2, "Second Value", java.sql.Date.valueOf("2010-02-01"))
))

val df = sqlContext.createDataFrame(rdd, schema)

Leggendo da fonti

Forse il modo più comune per creare DataFrame è da origini dati. Si può creare da un file parquet in hdf, ad esempio:

val df = sqlContext.read.parquet("hdfs:/path/to/file")


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow