Buscar..


Introducción

Un DataFrame es una abstracción de datos organizados en filas y columnas escritas. Es similar a los datos encontrados en bases de datos relacionales basadas en SQL. Aunque se ha transformado en solo un alias de tipo para Dataset [Fila] en Spark 2.0, todavía es ampliamente utilizado y útil para procesos de procesamiento complejos que hacen uso de la flexibilidad de su esquema y las operaciones basadas en SQL.

Creando DataFrames en Scala

Hay muchas formas de crear DataFrames. Se pueden crear a partir de listas locales, RDD distribuidos o leer de fuentes de datos.

Usando toDF

Al importar implícitos de spark sql, se puede crear un DataFrame desde un Seq, Array o RDD local, siempre que el contenido sea de un subtipo de Producto (las tuplas y las clases de casos son ejemplos bien conocidos de subtipos de Producto). Por ejemplo:

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

Utilizando createDataFrame

Otra opción es usar el método createDataFrame presente en SQLcontext. Esta opción también permite la creación desde listas locales o RDD de subtipos de productos como con toDF , pero los nombres de las columnas no se configuran en el mismo paso. Por ejemplo:

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

Además, este enfoque permite la creación a partir de RDD de instancias de Row , siempre que se pase un parámetro de schema para la definición del esquema del marco de datos resultante. Ejemplo:

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)

Lectura de fuentes

Tal vez la forma más común de crear DataFrame es a partir de fuentes de datos. Uno puede crearlo a partir de un archivo de parquet en hdfs, por ejemplo:

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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow