У меня есть следующие сценарии:
case class attribute(key:String,value:String)
case class entity(id:String,attr:List[attribute])
val entities = List(entity("1",List(attribute("name","sasha"),attribute("home","del"))),
entity("2",List(attribute("home","hyd"))))
val df = entities.toDF()
// df.show
+---+--------------------+
| id| attr|
+---+--------------------+
| 1|[[name,sasha], [d...|
| 2| [[home,hyd]]|
+---+--------------------+
//df.printSchema
root
|-- id: string (nullable = true)
|-- attr: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- key: string (nullable = true)
| | |-- value: string (nullable = true)
, что я хочу произвести:
+---+--------------------+-------+
| id| name | home |
+---+--------------------+-------+
| 1| sasha |del |
| 2| null |hyd |
+---+--------------------+-------+
Как мне поступить?Я рассмотрел довольно много похожих вопросов по стеку, но не смог найти ничего полезного.
Мой основной мотив - использовать groupBy для разных атрибутов, поэтому хочу перенести его в вышеупомянутый формат.
Я посмотрел на функциональность взрыва.Он разбивает список на отдельные строки, я этого не хочу.Я хочу создать больше столбцов из массива attribute
.
Подобные вещи, которые я нашел:
Spark - преобразовать Map в однострочный DataFrame
Разделить 1 столбец на 3 столбца в Spark Scala
Spark dataframe - Разделить столбец struct на 2 столбца