Это да, я имею в виду что InternalRow прокидывается дальше, но не используется. А getInt(0) — как раз оптимизируемая операция потому что там всегда будет int, а не String, например
оно прокидывается только туда, где может понадобиться. в map оно уже не нужно. поэтому там его нет. оно может понадобится только в deserializetoobject и поэтому туда и прокинули. может компилятор и сможет оптимизировать getInt(0), но это не выглядит простой задачей. массив каждой строки в разных местах ведь. и ему еще надо понять, что функции проверки по индексу( который в данном случае 0) иденпотенты.