RuntimeError: неподдерживаемый тип при преобразовании в Arrow: VectorUDT - PullRequest
0 голосов
/ 04 июля 2018

Я хочу преобразовать большой фрейм данных Spark в Pandas с более чем 1000000 строками. Я попытался преобразовать кадр данных искры в кадр данных Pandas, используя следующий код:

spark.conf.set("spark.sql.execution.arrow.enabled", "true")
result.toPandas()

Но я получил ошибку:

TypeError                                 Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/pyspark/sql/dataframe.py in toPandas(self)
   1949                 import pyarrow
-> 1950                 to_arrow_schema(self.schema)
   1951                 tables = self._collectAsArrow()

/usr/local/lib/python3.6/dist-packages/pyspark/sql/types.py in to_arrow_schema(schema)
   1650     fields = [pa.field(field.name, to_arrow_type(field.dataType), nullable=field.nullable)
-> 1651               for field in schema]
   1652     return pa.schema(fields)

/usr/local/lib/python3.6/dist-packages/pyspark/sql/types.py in <listcomp>(.0)
   1650     fields = [pa.field(field.name, to_arrow_type(field.dataType), nullable=field.nullable)
-> 1651               for field in schema]
   1652     return pa.schema(fields)

/usr/local/lib/python3.6/dist-packages/pyspark/sql/types.py in to_arrow_type(dt)
   1641     else:
-> 1642         raise TypeError("Unsupported type in conversion to Arrow: " + str(dt))
   1643     return arrow_type

TypeError: Unsupported type in conversion to Arrow: VectorUDT

During handling of the above exception, another exception occurred:

RuntimeError                              Traceback (most recent call last)
<ipython-input-138-4e12457ff4d5> in <module>()
      1 spark.conf.set("spark.sql.execution.arrow.enabled", "true")
----> 2 result.toPandas()

/usr/local/lib/python3.6/dist-packages/pyspark/sql/dataframe.py in toPandas(self)
   1962                     "'spark.sql.execution.arrow.enabled' is set to true. Please set it to false "
   1963                     "to disable this.")
-> 1964                 raise RuntimeError("%s\n%s" % (_exception_message(e), msg))
   1965         else:
   1966             pdf = pd.DataFrame.from_records(self.collect(), columns=self.columns)

RuntimeError: Unsupported type in conversion to Arrow: VectorUDT
Note: toPandas attempted Arrow optimization because 'spark.sql.execution.arrow.enabled' is set to true. Please set it to false to disable this.

Это не работает, но если я установил стрелку на false, это работает. Но это так медленно ... Есть идеи?

1 Ответ

0 голосов
/ 04 июля 2018

Arrow поддерживает только небольшой набор типов, и Spark UserDefinedTypes, включая ml и mllib VectorUDTs, не входят в число поддерживаемых.

Если вы хотите использовать стрелку, вам придется конвертировать ваши данные в поддерживаемый формат. Одним из возможных решений является расширение Vectors на столбцы - Как разбить вектор на столбцы - используя PySpark

Вы также можете сериализовать вывод, используя to_json метод:

from pyspark.sql.functions import to_json

 df.withColumn("your_vector_column", to_json("your_vector_column"))

но если данные достаточно велики для toPandas, чтобы стать серьезным узким местом, то я бы пересмотрел сбор таких данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...