Supposons que vous vouliez un bloc de données avec le schéma suivant:
root
|-- k: string (nullable = true)
|-- v: integer (nullable = false)
Vous définissez simplement le schéma pour un bloc de données et utilisez vide 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)
L'équivalent PySpark est presque identique:
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)
Utilisation d'encodeurs implicites (Scala uniquement) avec des Product
types comme Tuple
:
import spark.implicits._
Seq.empty[(String, Int)].toDF("k", "v")
ou classe de cas:
case class KV(k: String, v: Int)
Seq.empty[KV].toDF
ou
spark.emptyDataset[KV].toDF
À partir de Spark 2.0.0, vous pouvez effectuer les opérations suivantes.
Classe de cas
Définissons une
Person
classe de cas:Importer
spark
SparkSession impliciteEncoders
:Et utilisez SparkSession pour créer un vide
Dataset[Person]
:Schéma DSL
Vous pouvez également utiliser un schéma "DSL" (voir Fonctions de support pour DataFrames dans org.apache.spark.sql.ColumnName ).
la source
spark.emptyDataset
n'existe pas sur mon module, comment l'utiliser? il y en a (correct) similaire à (non correct)val df = apache.spark.emptyDataset[RawData]
?spark
est la valeur que vous créez enSparkSession.builder
ne faisant pas partie duorg.apache.spark
package. Il y a deuxspark
noms en usage. C'est le quespark
vous avez disponible dansspark-shell
la boîte.la source
Ici, vous pouvez créer un schéma en utilisant StructType dans scala et passer le RDD vide afin que vous puissiez créer une table vide. Le code suivant est pour le même.
la source
Version Java pour créer un DataSet vide:
la source
Voici une solution qui crée un dataframe vide dans pyspark 2.0.0 ou plus.
la source
Ceci est utile à des fins de test.
la source
À partir de Spark 2.4.3
la source