Necesito crear una trama de datos de la trama de datos existente en el que tengo que cambiar el esquema también.
Tengo una trama de datos como:
+-----------+----------+-------------+
|Id |Position |playerName |
+-----------+-----------+------------+
|10125 |Forward |Messi |
|10126 |Forward |Ronaldo |
|10127 |Midfield |Xavi |
|10128 |Midfield |Neymar |
y se creo este caso el uso de una clase dada a continuación:
case class caseClass (
Id: Int = "",
Position : String = "" ,
playerName : String = ""
)
Ahora tengo que hacer tanto playername y posición bajo el tipo de estructura.
es decir,
Necesito crear otra trama de datos con el esquema,
raíz
| - ID: int (anulable = true)
| - playerDetails: struct (anulable = true)
| | --Playername: string (anulable = true)
| | --Position: string (anulable = true)
Hice el siguiente código para crear una nueva trama de datos, haciendo referencia el enlace https://medium.com/@mrpowers/adding-structtype-columns-to-spark-dataframes-b44125409803
miesquema era
List(
StructField("Id", IntegerType, true),
StructField("Position",StringType, true),
StructField("playerName", StringType,true)
)
He probado el siguiente código
spark.sparkContext.parallelize(data),
myschema
)
pero no puedo hacer que suceda.
Vi pregunta similar cambio de esquema de trama de datos existente , pero no puedo entender la solución.
¿Hay alguna solución para implementar directamente dentro de la clase StructType caso? por lo que creo que no necesito hacer propio esquema para la creación de valores de tipo de estructura.
Función "estructura" se puede utilizar:
// data
val playersDF = Seq(
(10125, "Forward", "Messi"),
(10126, "Forward", "Ronaldo"),
(10127, "Midfield", "Xavi"),
(10128, "Midfield", "Neymar")
).toDF("Id", "Position", "playerName")
// action
val playersStructuredDF = playersDF.select($"Id", struct("playerName", "Position").as("playerDetails"))
// display
playersStructuredDF.printSchema()
playersStructuredDF.show(false)
Salida:
root
|-- Id: integer (nullable = false)
|-- playerDetails: struct (nullable = false)
| |-- playerName: string (nullable = true)
| |-- Position: string (nullable = true)
+-----+------------------+
|Id |playerDetails |
+-----+------------------+
|10125|[Messi, Forward] |
|10126|[Ronaldo, Forward]|
|10127|[Xavi, Midfield] |
|10128|[Neymar, Midfield]|
+-----+------------------+