Saltar al contenido

Transponer DataFrame sin agregación en Spark con scala

Tenemos la mejor información que hemos encontrado online. Nuestro deseo es que te sea de mucha utilidad y si quieres comentarnos algo que nos pueda ayudar a perfeccionar nuestra información hazlo con libertad.

Solución:

Puedes hacer esto usando pivotpero aún necesita agregación, pero ¿qué pasa si tiene múltiples value para COLUMN_NAME?

val df = Seq(
  ("col1", "val1"),
  ("col2", "val2"),
  ("col3", "val3"),
  ("col4", "val4"),
  ("col5", "val5")
).toDF("COLUMN_NAME", "VALUE")

df
  .groupBy()
  .pivot("COLUMN_NAME").agg(first("VALUE"))
  .show()

+----+----+----+----+----+
|col1|col2|col3|col4|col5|
+----+----+----+----+----+
|val1|val2|val3|val4|val5|
+----+----+----+----+----+

EDITAR:

si su marco de datos es realmente tan pequeño como en su ejemplo, puede recopilarlo como Map:

val map = df.as[(String,String)].collect().toMap

y luego aplicar esta respuesta

Si tu dataframe es lo suficientemente pequeño como en la preguntaentonces tú puedes recopila COLUMN_NAME para formar un esquema y recoger VALOR para formar las filas y entonces crear un nuevo marco de datos como

import org.apache.spark.sql.functions._
import org.apache.spark.sql.Row
//creating schema from existing dataframe
val schema = StructType(df.select(collect_list("COLUMN_NAME")).first().getAs[Seq[String]](0).map(x => StructField(x, StringType)))
//creating RDD[Row] 
val values = sc.parallelize(Seq(Row.fromSeq(df.select(collect_list("VALUE")).first().getAs[Seq[String]](0))))
//new dataframe creation
sqlContext.createDataFrame(values, schema).show(false)

que debería darte

+----+----+----+----+----+
|col1|col2|col3|col4|col5|
+----+----+----+----+----+
|val1|val2|val3|val4|val5|
+----+----+----+----+----+

Reseñas y calificaciones

Si piensas que ha resultado de ayuda este artículo, sería de mucha ayuda si lo compartes con otros programadores de esta forma nos ayudas a extender este contenido.

¡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 *