apache-spark
Spark DataFrame
Szukaj…
Wprowadzenie
Tworzenie DataFrames w Scali
Istnieje wiele sposobów tworzenia ramek danych. Można je tworzyć z list lokalnych, rozproszonych RDD lub czytać ze źródeł danych.
Korzystanie z toDF
Importując implicty Spark sql, można utworzyć ramkę danych z lokalnego Seq, Array lub RDD, o ile zawartość jest podtypu Product (krotki i klasy przypadków są dobrze znanymi przykładami podtypów Product). Na przykład:
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")
Korzystanie z createDataFrame
Innym rozwiązaniem jest użycie createDataFrame
niniejszego sposobu w SqlContext. Ta opcja umożliwia również tworzenie z lokalnych list lub RDD podtypów Produktów, jak w przypadku toDF
, ale nazwy kolumn nie są ustawiane w tym samym kroku. Na przykład:
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"))
))
Ponadto takie podejście umożliwia tworzenie z RDD instancji Row
, o ile przekazywany jest parametr schema
do definicji wynikowego schematu DataFrame. Przykład:
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)
Czytanie ze źródeł
Być może najczęstszym sposobem tworzenia DataFrame są źródła danych. Można go utworzyć z pliku parkietu w formacie hdfs, na przykład:
val df = sqlContext.read.parquet("hdfs:/path/to/file")