Получение "повысить EOFError" при вызове функции df.show () - PullRequest
0 голосов
/ 05 июля 2019

У меня есть фрейм данных (df) с 1 миллионом строк и двумя столбцами (ID (long int) и описание (String)).После преобразования их в tfidf (с использованием Tokenizer, HashingTF и IDF) фрейм данных df имеет два столбца (идентификатор и особенности (разреженный вектор).

Я вычислил матрицу подобия элемент-элемент, используя функции udf и dot.

Вычисление сходств выполнено успешно.

Однако, когда я вызываю функцию show (), получаю

"поднять EOFError"

Iпрочитайте так много вопросов по этому вопросу, но пока не получили правильного ответа.

Помните, если я применяю свое решение к небольшому набору данных (например, 100 строк), все работает успешно.

это связано с проблемой нехватки памяти?

Я проверил свой набор данных и информацию описания, я не вижу записей с пустыми или неподдерживаемыми текстовыми сообщениями

    dist_mat = data.alias("i").join(data.alias("j"), psf.col("i.ID") < psf.col("j.ID")) \
        .select(psf.col("i.ID").alias("i"), psf.col("j.ID").alias("j"),
                dot_udf("i.features", "j.features").alias("score"))

dist_mat = dist_mat.filter(psf.col('score') > 0.05)

dist_mat.show(1)```


If I removed the last line dist_mat.show(), it is working without error. However, when I used this line, got the error like
.......
```Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded```
...
Here is the part of the error message:
```[Stage 6:=======================================================> (38 + 1) / 39]Traceback (most recent call last):
  File "/usr/local/Cellar/apache-spark/2.4.0/libexec/python/lib/pyspark.zip/pyspark/daemon.py", line 170, in manager
  File "/usr/local/Cellar/apache-spark/2.4.0/libexec/python/lib/pyspark.zip/pyspark/daemon.py", line 73, in worker
  File "/usr/local/Cellar/apache-spark/2.4.0/libexec/python/lib/pyspark.zip/pyspark/worker.py", line 397, in main
    if read_int(infile) == SpecialLengths.END_OF_STREAM:
  File "/usr/local/Cellar/apache-spark/2.4.0/libexec/python/lib/pyspark.zip/pyspark/serializers.py", line 714, in read_int
    raise EOFError
EOFError```

1 Ответ

0 голосов
/ 11 июля 2019

Я увеличил размер кластера и запустил его снова. Работает без ошибок. Итак, сообщение об ошибке верно Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded

Однако, вычисляя попарные сходства для такой крупномасштабной матрицы, я нашел альтернативное решение, Масштабное умножение матриц с помощью pyspark

На самом деле, это очень эффективно и намного быстрее, даже лучше, чем использование BlockMatrix

...