Преобразование вложенной динамической структуры в строки

#scala #apache-spark #struct #nested

#scala #apache-spark #структура #вложенный

Вопрос:

Раздел моей вложенной структуры похож на приведенный ниже. Возникли проблемы при разборе вложенной структуры и размещении ее в несколько строк. Версия Scala — 2.11, а spark — 2.4.4. Ключи структуры в struct bbDemoImps являются динамическими.

 {"rates": {"bbDemoImps": {
                    "44": {
                        "imps": 0.0,
                        "ue": 0.0,
                        "demoId": "44"
                    },
                    "49": {
                        "imps": 0.0,
                        "ue": 0.0,
                        "demoId": "49"
                    },
                    "45": {
                        "imps": 0.0,
                        "ue": 0.0,
                        "demoId": "45"
                    },
                    "50": {
                        "imps": 0.0,
                        "ue": 0.0,
                        "demoId": "50"
                    }}}}
  

Попытался преобразовать структуры в массив, чтобы я мог использовать функцию explode для размещения их в отдельные строки.

 val bbDemoImps = new StructType()
      .add($"demoId".string)
      .add($"imps".double)
      .add($"ue".double)

    val structSchema =
        new StructType()
      .add($"bbDemoImps".array(bbDemoImps))

    val v1 = v2.select($"array_field".cast(structSchema))

  

Но это выдает ошибку. «невозможно привести structbbDemoImps:struct<44:struct<demoId:string,imps:double,ue:double,45:structdemoId:string,imps:double,ue:double,49:structdemoId:string,imps:double,ue:double,50:structdemoId:string,imps:double,ue:double>>
для structbbDemoImps:array<struct<демоИд:строка,imps:double,ue:double>>;;»

Правильный ли это подход?

ожидаемый результат:

 weekStartDate|demoId|demos|imps|rcImps
20201130|63|0.0|0.0|0.0
20201130|62|0.0|0.0|0.0 
  

любая помощь высоко ценится.