У меня очень большая таблица с двумя столбцами: первичным ключом и столбцом 'features'
, который представляет собой Spark ML "Vector" . Хранится как паркет в с3. Первоначально он был создан путем записи pyspark в паркет, но теперь мне нужно загрузить его как внешнюю таблицу в другой среде.
Я проверил схему на исходной таблице и получил следующее: StructType(List(StructField(IID,LongType,true),StructField(features,VectorUDT,true)))
Итак, я попытался загрузить паркет (на основе этот пост ) с помощью этого запроса:
CREATE EXTERNAL TABLE test.ext_table (
IID bigint,
features VectorUDT
) STORED AS PARQUET
LOCATION 's3://path-to-files/'
Это не работает с DataType vectorudt is not supported.(line 3, pos 11)
, поэтому я попробовал и ARRAY
, и STRUCT
(источник здесь ) и получил аналогичные ошибки.
Тогда я специально искал Spark типы данных и нашел this . Я попытался StructType
, StructField
и ArrayType
и получил ту же ошибку.
Кто-нибудь знает, как это можно сделать? Я думал о перезагрузке всей таблицы в информационный фрейм, а затем переписать ее обратно в паркет в другом месте, но эта таблица действительно огромна, и это кажется крайне неэффективным и просто глупым. Тем не менее, я, кажется, врезался в стену, и я не могу найти документацию, чтобы обойти ее.
Спасибо за любые идеи! Я работаю на Linux AWS EMR кластеров. Вот мои подробности версии:
$ pyspark --version
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.3.0
/_/
Using Scala version 2.11.8, OpenJDK 64-Bit Server VM, 1.8.0_171
Branch HEAD
Revision 300391394352b074b85b529e870816a72c6f314a