apache-spark
Spark DataFrame
Поиск…
Вступление
Создание 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")