Класс случая массива карт Scala - PullRequest
0 голосов
/ 20 января 2019

У меня есть опыт работы с Python и я просто изучаю scala. Я хочу объявить класс case для данных, считываемых из базы данных через spark. Данные выглядят следующим образом:

|id  |  person_info
+----+-------------------------------------------------------------------------------------------------------------------
| 1  |[{"fname":"john","lname":"doe","user_id":123,"dept":"hr"},{"fname":"jane","lname":"doe","user_id":456,"dept":"sales"}] 
| 2  |[{"fname":"ed","lname":"smith","user_id":345,"dept":"it"}] 

Я запутался в person_info, поскольку он также имеет user_id: Int, вот что я пробовал:

case class Person(id: Int, person_info: Array[Map[String, String]])

person_info было создано в sql через:

SELECT id, named_struct("fname", t.first_name, "lname", t.lastname, "user_id": t.userid, "dept": t.department) as person_info FROM mytable t

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Учитывая, что поля всегда одинаковы, вы можете использовать вместо этого вложенный класс case.

final case class PersonInfoEntry(fname: String, lname: String, user_id: Int, dept: String)
final case class Person(id: Int, person_info: List[PersonInfoEntry])
0 голосов
/ 20 января 2019

Предполагая, что person_info является допустимым объектом Json.Его можно преобразовать в массив объектов PersonDetails, как показано ниже

case class PersonDetails(fname:String,lname:String,userId:Int,dept:String)
case class Person(id:Int,person_info:Array[PersonDetails])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...