#java #json #scala #apache-spark #apache-spark-sql
Вопрос:
У меня есть проблема,в которой я должен создать вложенный json, который будет храниться в redis, а затем передаваться в пользовательский интерфейс через службу rest, где он будет использоваться для построения диаграммы солнечных лучей.
Пример Json прилагается ниже
Проблема с созданием вложенных JSON-это что,для JSON-объект (где категория cat_a) внутри JSON в массив, который я могу иметь глубину с размер Н , который не известен заранее и тем же ключом (дети в моем случае) в другой объект JSON (где категория cat_b) массива глубина — метров.
Мой фрейм данных выглядит следующим образом.
---------------- ---------------- ----------------
|Category |EventSeq |Count |
---------------- ---------------- ----------------
|cat_a |[A] |30 |
|cat_a |[A,B] |20 |
|cat_a |[A,B,C] |5 |
|cat_a |[A,W] |4 |
|cat_a |[C] |30 |
|cat_a |[C,A] |20 |
|cat_a |[C,A,B] |5 |
|cat_b |[X] |30 |
|cat_b |[X,Y] |20 |
|cat_b |[X,Y,Z] |5 |
|cat_b |[Z] |30 |
|cat_b |[Z,X] |20 |
---------------- ---------------- ----------------
Теперь я хочу преобразовать этот фрейм данных во вложенный Json следующим образом:
[
{
"category":"cat_a",
"children":[
{
"name":"A",
"count":30,
"children":[
{
"name":"B",
"count":20,
"children":[
{
"name":"C",
"count":5
}
]
},
{
"name":"W",
"count":4
}
]
},
{
"name":"C",
"count":30,
"children":[
{
"name":"A",
"count":20,
"children":[
{
"name":"B",
"count":5
}
]
}
]
}
]
},
{
"category":"cat_b",
"children":[
{
"name":"X",
"count":30,
"children":[
{
"name":"Y",
"count":20,
"children":[
{
"name":"Z",
"count":5
}
]
}
]
},
{
"name":"Z",
"count":30,
"children":[
{
"name":"X",
"count":20
}
]
}
]
}
]
Я не знаю, возможно ли это вообще в spark с scala или нет.
Если нет, то можно ли это сделать на уровне обслуживания Rest?
Комментарии:
1. версия spark ??
2. как насчет этих
|cat_a |[A,W] |4 |
данных, они недоступны в вашем образце json ?3. @Srinivas spark версия 2.4.[A,W] представлена как ребенок, у которого W параллельно B
Ответ №1:
В Lettuce redis, когда мы получаем данные, соответствующие ключу, есть команда
template.opsForZSet().reverseRangeByScore(K key, double min, double max);
таким образом, вы можете достичь, используя это
Комментарии:
1. Это не проблема redis. Это скорее вопрос о том, как преобразовать данный фрейм данных spark в Json.