Чтение / доступ к простому двойному массиву из паркета с использованием Spark с использованием Java API

У меня есть файл Parquet, созданный с использованием parquet-avro библиотека, в которой одно из полей имеет примитивный двойной массив, созданный с использованием следующего типа схемы:

Schema.createArray(Schema.create(Schema.Type.DOUBLE))

Я прочитал эти данные паркета из Spark и применил к ним UDAF (пользовательскую агрегированную функцию). В рамках UDAF org.apache.spark.sql.expressions.UserDefinedAggregateFunctionЯ пытаюсь получить доступ к этому полю из org.apache.spark.sql.Row объект, который передается в качестве параметра функции public void update(MutableAggregationBuffer mutableAggBuff, Row dataRow), Однако я не могу получить доступ к примитивному двойному массиву, вместо этого я получаю массив Double[] который является представлением в штучной упаковке объекта примитивного двойника. Это очень дорогое преобразование объекта данных примитивного двойного массива.

Когда я получаю двойной массив, я получаю в штучной упаковке java.lang.Double массив вместо примитивного двойного массива. Где-то в коде программы чтения паркетных файлов массив примитивов преобразуется в неэффективный массив двойных объектов. Как я могу предотвратить это дорогостоящее преобразование и получить первозданный двойной массив без изменений? Я могу написать код и преобразовать его обратно в примитивный массив, но объекты Double уже созданы, и это оказывает давление на виртуальную машину.

Единственные API на org.apache.spark.sql.Row являются:

// This list I can cast as Double type later
List myArrList = row.getList(0); 
WrappedArray wr = row.getAs(0);

Нам нужен способ получить примитив double[] массив без каких-либо дальнейших преобразований. Например:

WrappedArray<scala.Double> wr = row.getAs(0);
double[] myPrimArray = wr.array();

Вопросы:

  1. Могу ли я настроить Hadoop-parquet reader, чтобы мы могли читать двойной массив как простой двойной массив?
  2. Есть ли у Spark/Parquet-Hadoop Reader какой-либо способ сделать это без специального кода?

0 ответов

Другие вопросы по тегам