Saltar al contenido

scala – Spark: cómo unir todos los marcos de datos en bucle

Necesitamos tu ayuda para compartir nuestros escritos referente a las ciencias de la computación.

Solución:

Podrías crear una secuencia de DataFrames y luego usar reduce:

val results = fruits.
  map(fruit => Seq(("aaa", "bbb", fruit)).toDF("aCol","bCol","name")).
  reduce(_.union(_))

results.show()

Creo que la respuesta de Steffen Schmitz es la más concisa. A continuación hay una respuesta más detallada si está buscando más personalización (de tipos de campo, etc.):

import org.apache.spark.sql.types.StructType, StructField, StringType
import org.apache.spark.sql.Row

//initialize DF
val schema = StructType(
  StructField("aCol", StringType, true) ::
  StructField("bCol", StringType, true) ::
  StructField("name", StringType, true) :: Nil)
var initialDF = spark.createDataFrame(sc.emptyRDD[Row], schema)

//list to iterate through
var fruits = List(
    "apple"
    ,"orange"
    ,"melon"
)

for (x <- fruits) 
  //union returns a new dataset
  initialDF = initialDF.union(Seq(("aaa", "bbb", x)).toDF)


//initialDF.show()

referencias:

  • ¿Cómo crear un DataFrame vacío con un esquema específico?
  • https://spark.apache.org/docs/2.0.1/api/java/org/apache/spark/sql/Dataset.html
  • https://docs.databricks.com/spark/latest/faq/append-a-row-to-rdd-or-dataframe.html

Si tiene marcos de datos diferentes/múltiples, puede usar el siguiente código, que es eficiente.

val newDFs = Seq(DF1,DF2,DF3)
newDFs.reduce(_ union _)

Sección de Reseñas y Valoraciones

Agradecemos que desees añadir valor a nuestro contenido dando tu experiencia en las reseñas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *