Nehmen wir an, Sie möchten einen Datenrahmen mit dem folgenden Schema:
root
|-- k: string (nullable = true)
|-- v: integer (nullable = false)
Sie definieren einfach das Schema für einen Datenrahmen und verwenden leer 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)
Das PySpark-Äquivalent ist fast identisch:
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)
Verwenden impliziter Encoder (nur Scala) mit Product
Typen wie Tuple
:
import spark.implicits._
Seq.empty[(String, Int)].toDF("k", "v")
oder Fallklasse:
case class KV(k: String, v: Int)
Seq.empty[KV].toDF
oder
spark.emptyDataset[KV].toDF
Ab Spark 2.0.0 können Sie Folgendes tun.
Fallklasse
Definieren wir eine
Person
Fallklasse:Import
spark
SparkSession implizitEncoders
:Und verwenden Sie SparkSession, um ein leeres zu erstellen
Dataset[Person]
:Schema DSL
Sie können auch ein Schema "DSL" verwenden (siehe Unterstützungsfunktionen für DataFrames in org.apache.spark.sql.ColumnName ).
quelle
spark.emptyDataset
auf meinem Modul nicht vorhanden, wie man es benutzt? gibt es einige (richtig) ähnlich (nicht korrekt)val df = apache.spark.emptyDataset[RawData]
?spark
ist der Wert, den Sie erstellen, wenn SieSparkSession.builder
nicht Teil desorg.apache.spark
Pakets sind. Es werden zweispark
Namen verwendet. Es ist das, wasspark
Sie sofortspark-shell
einsatzbereit haben.quelle
Hier können Sie ein Schema mit StructType in Scala erstellen und die leere RDD übergeben, damit Sie eine leere Tabelle erstellen können. Der folgende Code ist für das gleiche.
quelle
Java-Version zum Erstellen eines leeren DataSet:
quelle
Hier ist eine Lösung, die einen leeren Datenrahmen in pyspark 2.0.0 oder höher erstellt.
quelle
Ab Spark 2.4.3
quelle