Comment créer une trame de données à partir dataframe existants et faire des champs spécifiques comme le type Struct?

ADARSH K:

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.

Ps70l:

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]|
+-----+------------------+

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=193121&siteId=1
conseillé
Classement