piszę niektóre dane w formacie parkietu przy użyciu Spark SQL gdzie powstały schemat wygląda tak:Dlaczego wydajność zapytania różni się w kolumnach zagnieżdżonych w Spark SQL?
root
|-- stateLevel: struct (nullable = true)
| |-- count1: integer (nullable = false)
| |-- count2: integer (nullable = false)
| |-- count3: integer (nullable = false)
| |-- count4: integer (nullable = false)
| |-- count5: integer (nullable = false)
|-- countryLevel: struct (nullable = true)
| |-- count1: integer (nullable = false)
| |-- count2: integer (nullable = false)
| |-- count3: integer (nullable = false)
| |-- count4: integer (nullable = false)
| |-- count5: integer (nullable = false)
|-- global: struct (nullable = true)
| |-- count1: integer (nullable = false)
| |-- count2: integer (nullable = false)
| |-- count3: integer (nullable = false)
| |-- count4: integer (nullable = false)
| |-- count5: integer (nullable = false)
Mogę również przekształcić te same dane w bardziej płaskiej schematu, który wygląda tak:
root
|-- stateLevelCount1: integer (nullable = false)
|-- stateLevelCount2: integer (nullable = false)
|-- stateLevelCount3: integer (nullable = false)
|-- stateLevelCount4: integer (nullable = false)
|-- stateLevelCount5: integer (nullable = false)
|-- countryLevelCount1: integer (nullable = false)
|-- countryLevelCount2: integer (nullable = false)
|-- countryLevelCount3: integer (nullable = false)
|-- countryLevelCount4: integer (nullable = false)
|-- countryLevelCount5: integer (nullable = false)
|-- globalCount1: integer (nullable = false)
|-- globalCount2: integer (nullable = false)
|-- globalCount3: integer (nullable = false)
|-- globalCount4: integer (nullable = false)
|-- globalCount5: integer (nullable = false)
Teraz, gdy uruchamiam kwerendę na pierwszym zestawie danych w kolumnie takiej jak global.count1, zajmuje ona znacznie więcej czasu niż zapytanie globalCount1 w drugim zestawie danych. I odwrotnie, zapisanie pierwszego zestawu danych w Parkiecie zajmuje dużo mniej czasu niż napisanie drugiego zestawu danych. Wiem, że moje dane są przechowywane w kolumnach ze względu na Parquet, ale myślałem, że wszystkie zagnieżdżone kolumny będą przechowywane razem. Na przykład w pierwszym zestawie danych wydaje się, że cała kolumna "globalna" jest przechowywana razem, a nie wartości "global.count1", "global.count2" itd. Są przechowywane razem. Czy to oczekiwane zachowanie?