Je dois créer un dataframe de dataframe existant dans lequel je dois changer le schéma ainsi.
J'ai un dataframe comme:
+-----------+----------+-------------+
|Id |Position |playerName |
+-----------+-----------+------------+
|10125 |Forward |Messi |
|10126 |Forward |Ronaldo |
|10127 |Midfield |Xavi |
|10128 |Midfield |Neymar |
et je suis créé cette aide d'une classe de cas donné ci-dessous:
case class caseClass (
Id: Int = "",
Position : String = "" ,
playerName : String = ""
)
Maintenant , je dois faire à la fois du joueur et la position dans le type Struct.
c'est à dire,
Je dois créer un autre schéma avec dataframe,
racine
| - Id: int (annulable = true)
| - playerDetails: struct (annulable = true)
| | --Playername: string (annulable = true)
| | --Position: string (annulable = true)
Je l' ai fait le code suivant pour créer une nouvelle trame de données en renvoyant le lien https://medium.com/@mrpowers/adding-structtype-columns-to-spark-dataframes-b44125409803
mon_schema était
List(
StructField("Id", IntegerType, true),
StructField("Position",StringType, true),
StructField("playerName", StringType,true)
)
J'ai essayé le code suivant
spark.sparkContext.parallelize(data),
myschema
)
mais je ne peux pas y arriver.
Je voyais la même question le changement schéma existant dataframe mais je ne comprends pas la solution.
Y at-il une solution pour mettre en œuvre directement StructType dans la classe de cas? de sorte que je pense que je ne ai pas besoin de faire propre schéma pour la création de valeurs de type struct.
Fonction « struct » peut être utilisé:
// 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)
Production:
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]|
+-----+------------------+