#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
любая помощь высоко ценится.