Supongamos que desea un marco de datos con el siguiente esquema:
root
|-- k: string (nullable = true)
|-- v: integer (nullable = false)
Simplemente define el esquema para un marco de datos y usa vacío RDD[Row]
:
import org.apache.spark.sql.types.{
StructType, StructField, StringType, IntegerType}
import org.apache.spark.sql.Row
val schema = StructType(
StructField("k", StringType, true) ::
StructField("v", IntegerType, false) :: Nil)
// Spark < 2.0
// sqlContext.createDataFrame(sc.emptyRDD[Row], schema)
spark.createDataFrame(sc.emptyRDD[Row], schema)
El equivalente de PySpark es casi idéntico:
from pyspark.sql.types import StructType, StructField, IntegerType, StringType
schema = StructType([
StructField("k", StringType(), True), StructField("v", IntegerType(), False)
])
# or df = sc.parallelize([]).toDF(schema)
# Spark < 2.0
# sqlContext.createDataFrame([], schema)
df = spark.createDataFrame([], schema)
Usando codificadores implícitos (solo Scala) con Product
tipos como Tuple
:
import spark.implicits._
Seq.empty[(String, Int)].toDF("k", "v")
o clase de caso:
case class KV(k: String, v: Int)
Seq.empty[KV].toDF
o
spark.emptyDataset[KV].toDF
A partir de Spark 2.0.0, puede hacer lo siguiente.
Clase de caso
Definamos una
Person
clase de caso:Importar
spark
SparkSession implícitoEncoders
:Y use SparkSession para crear un vacío
Dataset[Person]
:Esquema DSL
También puede utilizar un esquema "DSL" (consulte Funciones de soporte para DataFrames en org.apache.spark.sql.ColumnName ).
fuente
spark.emptyDataset
no existe en mi módulo, ¿Cómo usarlo? hay algunos (correctos) similares a (no correctos)val df = apache.spark.emptyDataset[RawData]
?spark
es el valor que crea usando queSparkSession.builder
no forma parte delorg.apache.spark
paquete. Hay dosspark
nombres en uso. Es elspark
que tienes disponiblespark-shell
de inmediato.fuente
Aquí puede crear un esquema usando StructType en scala y pasar el RDD vacío para que pueda crear una tabla vacía. El siguiente código es para lo mismo.
fuente
Versión de Java para crear DataSet vacío:
fuente
Aquí hay una solución que crea un marco de datos vacío en pyspark 2.0.0 o más.
fuente
Esto es útil para realizar pruebas.
fuente
A partir de Spark 2.4.3
fuente