Поиск…


Вступление

DataFrame - это абстракция данных, организованных в строках и типизированных столбцах. Это похоже на данные, найденные в реляционных базах данных на базе SQL. Хотя он был преобразован в просто псевдоним типа для Dataset [Row] в Spark 2.0, он по-прежнему широко используется и полезен для сложных конвейеров обработки, используя гибкость схемы и операции на основе SQL.

Создание DataFrames в Scala

Существует много способов создания DataFrames. Они могут быть созданы из локальных списков, распределенных RDD или чтения из источников данных.

Использование toDF

Импортируя искровые sql implicits, можно создать DataFrame из локального Seq, Array или RDD, если содержимое относится к подтипу Product (кортежи и классы case - хорошо известные примеры подтипов Product). Например:

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

Другой вариант - использовать метод createDataFrame присутствующий в SQLcontext. Этот параметр также позволяет создавать из локальных списков или RDD подтипов Product как с toDF , но имена столбцов не заданы на одном шаге. Например:

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

Кроме того, этот подход позволяет создавать из RDD экземпляров Row , пока параметр schema передается вместе для определения результирующей схемы DataFrame. Пример:

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)

Чтение из источников

Возможно, наиболее распространенным способом создания DataFrame является источник данных. Его можно создать из файла паркета в hdfs, например:

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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow