Vamos supor que você queira um frame de dados com o seguinte esquema:
root
|-- k: string (nullable = true)
|-- v: integer (nullable = false)
Você simplesmente define o esquema para um quadro de dados e usa vazio 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)
O equivalente do PySpark é quase 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 (somente Scala) com Product
tipos como Tuple
:
import spark.implicits._
Seq.empty[(String, Int)].toDF("k", "v")
ou classe de caso:
case class KV(k: String, v: Int)
Seq.empty[KV].toDF
ou
spark.emptyDataset[KV].toDF
A partir do Spark 2.0.0, você pode fazer o seguinte.
Classe de Caso
Vamos definir uma
Person
classe de caso:Importe
spark
SparkSession implícitoEncoders
:E use SparkSession para criar um vazio
Dataset[Person]
:Esquema DSL
Você também pode usar um esquema "DSL" (consulte Funções de suporte para DataFrames em org.apache.spark.sql.ColumnName ).
fonte
spark.emptyDataset
não existe no meu módulo, como usá-lo? existem alguns (corretos) semelhantes a (incorretos)val df = apache.spark.emptyDataset[RawData]
?spark
é o valor que você cria usandoSparkSession.builder
não parte doorg.apache.spark
pacote. Existem doisspark
nomes em uso. É o quespark
você tem disponívelspark-shell
fora da caixa.fonte
Aqui você pode criar um esquema usando StructType no scala e passar o RDD vazio para que possa criar uma tabela vazia. O código a seguir é para o mesmo.
fonte
Versão Java para criar DataSet vazio:
fonte
Aqui está uma solução que cria um dataframe vazio no pyspark 2.0.0 ou mais.
fonte
A partir do Spark 2.4.3
fonte