我有一个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```
答案 0 :(得分:0)
我增加了集群大小,然后再次运行。它正在正常工作。因此,错误消息为true
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
但是,通过计算如此大型矩阵的成对相似性,我找到了另一种解决方案Large scale matrix multiplication with pyspark
实际上,它非常有效,并且比使用BlockMatrix更快甚至更快。