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 pivot
pero 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.