调用df.show()函数时出现“ raise EOFError”

时间:2019-07-05 20:00:26

标签: pyspark pyspark-sql

我有一个dataframe(df),具有一百万行和两列(ID(长整数)和description(String))。在将它们转换为tfidf(使用Tokenizer,HashingTF和IDF)后,数据帧df具有两列(ID和特征(稀疏矢量)。

我使用udf和点函数计算了项目-项目相似度矩阵。

相似性计算成功完成。

但是,当我调用show()函数时

“引发EOFError”

我在这个问题上读了很多问题,但是还没有得到正确的答案。

请记住,如果我将解决方案应用于较小的数据集(例如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 :(得分:0)

我增加了集群大小,然后再次运行。它正在正常工作。因此,错误消息为true  Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded

但是,通过计算如此大型矩阵的成对相似性,我找到了另一种解决方案Large scale matrix multiplication with pyspark

实际上,它非常有效,并且比使用BlockMatrix更快甚至更快。