py4j.protocol.Py4JError: произошла ошибка при вызове o112.save

#python #apache-spark #pyspark #apache-spark-sql

#python #apache-spark #pyspark #apache-spark-sql

Вопрос:

Я запускаю отправку задания pyspark на университетском сервере:

Моя конфигурация : --master yarn --deploy-mode cluster --num-executors 150 --executor-cores 4 --executor-memory 28g --driver-memory 28g

Мои первые несколько шагов выполняются правильно :

 df = spark.read.format('csv') 
                    .option('header',True) 
                    .option('multiLine', True) 
                    .load(data_file)
df.show()

udf_function = udf(stamp, StringType())
new_df = df.withColumn("column_a", udf_function(struct([df[x] for x in df.columns])))
new_df.show()   
 

Когда я пытаюсь выполнить следующие команды по отдельности, я получаю две очень похожие ошибки:

Команда 1:

 new_df.select("column_a").distinct().show(100)
 

Ошибка:

 ERROR:root:Exception while sending command.
Traceback (most recent call last):
  File "/hadoop4/yarn/nm/usercache/apps/appcache/application_1593105789029_2249545/container_e01_1593105789029_2249545_02_000002/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1159, 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 "/hadoop4/yarn/nm/usercache/apps/appcache/application_1593105789029_2249545/container_e01_1593105789029_2249545_02_000002/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 985, in send_command
    response = connection.send_command(command)
  File "/hadoop4/yarn/nm/usercache/apps/appcache/application_1593105789029_2249545/container_e01_1593105789029_2249545_02_000002/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1164, in send_command
    "Error while receiving", e, proto.ERROR_ON_RECEIVE)
py4j.protocol.Py4JNetworkError: Error while receiving
Traceback (most recent call last):
  File "python_stamp.py", line 93, in <module>
    main()
  File "python_stamp.py", line 82, in main
    new_df.select("planning_cluster_id").distinct().show(100)
  File "/hadoop4/yarn/nm/usercache/apps/appcache/application_1593105789029_2249545/container_e01_1593105789029_2249545_02_000002/pyspark.zip/pyspark/sql/dataframe.py", line 380, in show
 

Команда 2:

 new_df.write.mode("overwrite").format("csv").option("delimiter", ",").option("header", "true").save(save_path)
 

Ошибка:

 ERROR:root:Exception while sending command.
Traceback (most recent call last):
  File "/hadoop1/yarn/nm/usercache/apps/appcache/application_1593105789029_2249417/container_e01_1593105789029_2249417_02_000002/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1159, 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 "/hadoop1/yarn/nm/usercache/apps/appcache/application_1593105789029_2249417/container_e01_1593105789029_2249417_02_000002/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 985, in send_command
    response = connection.send_command(command)
  File "/hadoop1/yarn/nm/usercache/apps/appcache/application_1593105789029_2249417/container_e01_1593105789029_2249417_02_000002/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1164, in send_command
    "Error while receiving", e, proto.ERROR_ON_RECEIVE)
py4j.protocol.Py4JNetworkError: Error while receiving
Traceback (most recent call last):
  File "python_stamp.py", line 91, in <module>
    main()
  File "python_stamp.py", line 83, in main
    new_df.write.mode("overwrite").format("csv").option("delimiter", ",").option("header", "true").save(save_path)
  File "/hadoop1/yarn/nm/usercache/apps/appcache/application_1593105789029_2249417/container_e01_1593105789029_2249417_02_000002/pyspark.zip/pyspark/sql/readwriter.py", line 738, in save
  File "/hadoop1/yarn/nm/usercache/apps/appcache/application_1593105789029_2249417/container_e01_1593105789029_2249417_02_000002/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
  File "/hadoop1/yarn/nm/usercache/apps/appcache/application_1593105789029_2249417/container_e01_1593105789029_2249417_02_000002/pyspark.zip/pyspark/sql/utils.py", line 63, in deco
  File "/hadoop1/yarn/nm/usercache/apps/appcache/application_1593105789029_2249417/container_e01_1593105789029_2249417_02_000002/py4j-0.10.7-src.zip/py4j/protocol.py", line 336, in get_return_value
py4j.protocol.Py4JError: An error occurred while calling o112.save
 

Кто-нибудь знает причину этого? Я почти уверен, что это не из-за какой-либо ошибки памяти, так как предыдущие шаги, которые показывают таблицу, загружают таблицу, выполняются правильно.

Дополнительная информация: когда я запускаю все эти команды в оболочке pyspark, они выполняются отлично.

Комментарии:

1. Answer from Java side is empty означает, что JVM произошел сбой

2. Есть ли у вас какие-либо возможные средства правовой защиты? У меня заканчивается память?