Cómo crear una trama de datos de la trama de datos existente y hacer que los campos específicos como el tipo de estructura?

ADARSH K:

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.

Ps70l:

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=193125&siteId=1
Recomendado
Clasificación