Spark SQL, как запросить подмножество структурных полей в массиве [Struct]? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть таблица в Hive, которая имеет схему:

root
 |-- startdate: string (nullable = true)
 |-- enddate: string (nullable = true)
 |-- items: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- _id: string (nullable = true)
 |    |    |-- name: string (nullable = true)
 |    |    |-- .......: string (nullable = true)
 |    |    |-- otherfields: string (nullable = true)

Я хочу получить только _id и столбец имени из полей массива элементов, т.е.:

|-- items: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- _id: string (nullable = true)
 |    |    |-- name: string (nullable = true)

естьспособ сделать это без дополнительных преобразований в самом Spark, чтобы только фактические столбцы были получены только из Hive?

Я использую Spark 2.2.

1 Ответ

0 голосов
/ 27 сентября 2019

Вы можете попробовать следующее:

data.select("items._id", "items.name")

Хотя это может привести к:

root
 |-- _id: array (nullable = true)
 |    |-- element: string (containsNull = true)
 |-- name: array (nullable = true)
 |    |-- element: string (containsNull = true)

В Spark 2.4+ вы можете попробовать использовать arrays_zip

...