У меня есть вложенная структура json, загруженная в фрейм данных в искре.Он содержит несколько слоев массивов, и я пытаюсь выяснить, как запросить эту структуру по значениям во внутренних массивах.
Пример: рассмотрим следующую структуру (файл directors.json)
[
{
"director": "Steven Spielberg",
"films": [
{
"name": "E.T",
"actors": ["Henry Thomas", "Drew Barrymore"]
},
{
"name": "The Goonies",
"actors": ["Sean Astin", "Josh Brolin"]
}
]
},
{
"director": "Quentin Tarantino",
"films": [
{
"name": "Pulp Fiction",
"actors": ["John Travolta", "Samuel L. Jackson"]
},
{
"name": "Kill Bill: Vol. 1",
"actors": ["Uma Thurman", "Daryl Hannah"]
}
]
}
]
Допустим, я хочу запустить запрос, который вернет все фильмы, в которых участвовал конкретный актер. Примерно так:
val directors = spark.read.json("directors.json")
directors.select($"films.name").where($"films.actors" === "Henry Thomas")
Когда я запускаю это вИскривление оболочки Я получаю исключение:
org.apache.spark.sql.AnalysisException: cannot resolve '(`films`.`actors` = 'Henry Thomas')' due to data type mismatch: differing types in '(`films`.`actors` = 'Henry Thomas')' (array<array<string>> and string).;;
'Project [name#128]
+- 'Filter (films#92.actors = Henry Thomas)
+- AnalysisBarrier
+- Project [films#92.name AS name#128, films#92]
+- Relation[director#91,films#92] json
Как правильно сделать такой запрос?
Существуют ли другие альтернативы?Если да, каковы плюсы и минусы?
Спасибо
Редактировать
@ thebluephantom, это все еще не работает.получая подобное исключение.Я думаю, это потому, что у меня есть массив в другом массиве.Это исключение:
org.apache.spark.sql.AnalysisException: cannot resolve 'array_contains(`films`.`actors`, 'Henry Thomas')' due to data type mismatch: Arguments must be an array followed by a value of same type as the array members;;
'Filter array_contains(films#7.actors, Henry Thomas)
+- AnalysisBarrier
+- Project [director#6, films#7]
+- Relation[director#6,films#7] json