apache-spark
Spark DataFrame
Zoeken…
Invoering
Dataframes maken in Scala
Er zijn veel manieren om DataFrames te maken. Ze kunnen worden gemaakt op basis van lokale lijsten, gedistribueerde RDD's of lezen uit gegevensbronnen.
ToDF gebruiken
Door implicaties van spark sql te importeren, kan men een DataFrame maken van een lokale Seq, Array of RDD, zolang de inhoud van een Product-subtype is (tupels en case-klassen zijn bekende voorbeelden van Product-subtypen). Bijvoorbeeld:
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")
CreateDataFrame gebruiken
Een andere optie is het gebruik van de methode createDataFrame
die aanwezig is in SQLcontext. Met deze optie kunt u ook vanuit lokale lijsten of RDD's van productsubtypen maken zoals met toDF
, maar de namen van de kolommen worden niet in dezelfde stap ingesteld. Bijvoorbeeld:
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"))
))
Bovendien maakt deze benadering het mogelijk om vanuit RDD's van Row
instanties te maken, zolang een schema
wordt doorgegeven voor de definitie van het resulterende schema van het DataFrame. Voorbeeld:
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)
Lezen uit bronnen
Misschien is de meest gebruikelijke manier om DataFrame te maken vanuit gegevensbronnen. Je kunt het maken van een parketbestand in hdf's, bijvoorbeeld:
val df = sqlContext.read.parquet("hdfs:/path/to/file")