Загрузить вектор Spark ML во внешнюю таблицу (pyspark) - PullRequest
0 голосов
/ 04 сентября 2018

У меня очень большая таблица с двумя столбцами: первичным ключом и столбцом '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
...