Szukaj…


Wprowadzenie

DataFrame to abstrakcja danych uporządkowana w wierszach i kolumnach maszynowych. Jest podobny do danych znalezionych w relacyjnych bazach danych opartych na SQL. Mimo że został przekształcony w alias typu dla zestawu danych [Row] w Spark 2.0, jest nadal szeroko stosowany i użyteczny w złożonych potokach przetwarzania, wykorzystując elastyczność schematu i operacje oparte na SQL.

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")


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow