как взорвать схему dataframe в блоках данных - PullRequest
0 голосов
/ 09 января 2020

У меня есть схема, которая должна быть взорвана, ниже схема

 |-- CaseNumber: string (nullable = true)
 |-- Customers: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- Contacts: array (nullable = true)
 |    |    |    |-- element: struct (containsNull = true)
 |    |    |    |    |-- FirstName: string (nullable = true)
 |    |    |    |    |-- LastName: string (nullable = true)

Я хочу, чтобы моя схема была такой,

|-- CaseNumber: string (nullable = true)
|-- FirstName: string (nullable = true)
|-- LastName: string (nullable = true)

или

+----------+---------------------+
| CaseNumber| FirstName| LastName|
+----------+---------------------+
|       1  |     aa    |      bb |
+----------|-----------|---------|   
|       2  |     cc    |      dd | 
+------------------------------- |

Я новичок в базах данных, любая помощь будет оценена. Спасибо

please click this for sample data

Ответы [ 2 ]

1 голос
/ 09 января 2020

Вот один из способов решить эту проблему без использования команды разнесения -

case class MyCase(val Customers = Array[Customer](), CaseNumber : String
)

case class Customers(val Contacts = Array[Contacts]()
)

case class Contacts(val Firstname:String, val LastName:String
)

val dataset = // dataframe.as[MyCase]

dataset.map{ mycase => 

// return a Seq of tuples like - (mycase.caseNumber, //read customer's contract's first and last name )
//one row per first and last names, repeat mycase.caseNumber .. basically a loop
}.flatmap(identity)

0 голосов
/ 09 января 2020

Я думаю, что вы все еще можете взорваться (CustomersFlat.contacts). Я уверен, что это что-то вроде этого какое-то время go, так что простите мне мой синтаксис и дайте мне знать, работает ли это

df.select("caseNumber",explode("customersFlat.contacts").as("contacts").select("caseNumber","contacts.firstName","contacts.lastName")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...