【问题标题】:py4j.protocol.Py4JNetworkError: Answer from Java side is emptypy4j.protocol.Py4JNetworkError:Java 端的答案为空
【发布时间】:2021-07-06 12:57:47
【问题描述】:

这是我在 Google Colab 上使用的代码。它一直卡在 model.fit 部分并引发此异常。我无法在任何地方找到任何解决方案。 Colab 上的内存似乎也变得非常高,开始认为 spark nlp 库中存在内存泄漏。

import sparknlp
spark = sparknlp.start()

data = spark.read.csv("60days-ofdata.csv", header=True)

from sparknlp.pretrained import PretrainedPipeline
from sparknlp import Finisher
from pyspark.ml import Pipeline

finisher = Finisher().setInputCols(["token", "lemmas", "pos"])
explain_pipeline_model = PretrainedPipeline("explain_document_ml").model

pipeline = Pipeline() \
    .setStages([
        explain_pipeline_model,
        finisher
        ])

model = pipeline.fit(data.select('text'))
annotations_finished_df = model.transform(data.select('text'))

remover = StopWordsRemover(inputCol="finished_lemmas", outputCol="filtered")
filtered_df = remover.transform(text_lemmas)
filtered_df.show()

cv = CountVectorizer(inputCol="filtered", outputCol="features")
model = cv.fit(filtered_df.select('filtered')) <--------------------------------error thrown while here
result = model.transform(filtered_df.select('filtered'))

错误:

INFO:py4j.java_gateway:Error while receiving.
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/py4j/java_gateway.py", line 1207, in send_command
    raise Py4JNetworkError("Answer from Java side is empty")
py4j.protocol.Py4JNetworkError: Answer from Java side is empty
ERROR:root:Exception while sending command.
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/py4j/java_gateway.py", line 1207, in send_command
    raise Py4JNetworkError("Answer from Java side is empty")
py4j.protocol.Py4JNetworkError: Answer from Java side is empty

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/py4j/java_gateway.py", line 1033, in send_command
    response = connection.send_command(command)
  File "/usr/local/lib/python3.7/dist-packages/py4j/java_gateway.py", line 1212, in send_command
    "Error while receiving", e, proto.ERROR_ON_RECEIVE)
py4j.protocol.Py4JNetworkError: Error while receiving
---------------------------------------------------------------------------
Py4JError                                 Traceback (most recent call last)
<ipython-input-8-0caf2f9be8f3> in <module>()
      5 
      6 cv = CountVectorizer(inputCol="filtered", outputCol="features")
----> 7 model = cv.fit(filtered_df.select('filtered'))
      8 result = model.transform(filtered_df.select('filtered'))
      9 result.show()

5 frames
/usr/local/lib/python3.7/dist-packages/py4j/protocol.py in get_return_value(answer, gateway_client, target_id, name)
    334             raise Py4JError(
    335                 "An error occurred while calling {0}{1}{2}".
--> 336                 format(target_id, ".", name))
    337     else:
    338         type = answer[1]

Py4JError: An error occurred while calling o538.fit

【问题讨论】:

  • 答案为空可能意味着JVM已经死了。这很可能是由于内存问题,因为您还看到内存消耗变得很高。

标签: python apache-spark pyspark countvectorizer johnsnowlabs-spark-nlp


【解决方案1】:

mck 提供了一个很好的答案,我将补充一点,从 spark-nlp 3.0.0 及更高版本开始解决这个问题,您可以将内存参数传递给 start() 函数,

import sparknlp
spark = sparknlp.start(memory="16G")

在驱动程序中获得 16GB 的 RAM 内存。这或许能解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多