apache-spark
Spark DataFrame
Ricerca…
introduzione
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")