1
resposta

[Bug] Py4JJavaError

Erro Spark: Já fiz diversas vezes a configuração, porém não consigo gerar o dataframe. Preciso utilizar no vscode, pois quero aplicar os aprendizados no meu trabalho.

Váriaveis de ambiente: JAVA_HOME: C:\Program Files\Java\jdk-11 | HADOOP_HOME: C:\hadoop | SPARK_HOME: C:\spark

CÓDIGO:

CÉLULA 1:

import findspark
findspark.init()

CÉLULA 2:

from pyspark.sql import SparkSession
spark = SparkSession.builder.master('local[*]').getOrCreate()

CÉLULA 3:

spark

CÉLULA 4:

data = [('Zeca','35'), ('Eva', '29')]
colNames = ['Nome', 'Idade']
df = spark.createDataFrame(data, colNames)
df.show()

ERRO:

Py4JJavaError                             Traceback (most recent call last)
Cell In[21], line 1
----> 1 df.show()

File C:\spark\python\pyspark\sql\dataframe.py:901, in DataFrame.show(self, n, truncate, vertical)
    895     raise PySparkTypeError(
    896         error_class="NOT_BOOL",
    897         message_parameters={"arg_name": "vertical", "arg_type": type(vertical).__name__},
    898     )
    900 if isinstance(truncate, bool) and truncate:
--> 901     print(self._jdf.showString(n, 20, vertical))
    902 else:
    903     try:

File C:\spark\python\lib\py4j-0.10.9.7-src.zip\py4j\java_gateway.py:1322, in JavaMember.__call__(self, *args)
   1316 command = proto.CALL_COMMAND_NAME +\
   1317     self.command_header +\
   1318     args_command +\
   1319     proto.END_COMMAND_PART
   1321 answer = self.gateway_client.send_command(command)
-> 1322 return_value = get_return_value(
   1323     answer, self.gateway_client, self.target_id, self.name)
   1325 for temp_arg in temp_args:
   1326     if hasattr(temp_arg, "_detach"):

File C:\spark\python\pyspark\errors\exceptions\captured.py:169, in capture_sql_exception.<locals>.deco(*a, **kw)
    167 def deco(*a: Any, **kw: Any) -> Any:
    168     try:
--> 169         return f(*a, **kw)
    170     except Py4JJavaError as e:
    171         converted = convert_exception(e.java_exception)

File C:\spark\python\lib\py4j-0.10.9.7-src.zip\py4j\protocol.py:326, in get_return_value(answer, gateway_client, target_id, name)
    324 value = OUTPUT_CONVERTER[type](answer[2:], gateway_client)
    325 if answer[1] == REFERENCE_TYPE:
--> 326     raise Py4JJavaError(
    327         "An error occurred while calling {0}{1}{2}.\n".
    328         format(target_id, ".", name), value)
    329 else:
    330     raise Py4JError(
    331         "An error occurred while calling {0}{1}{2}. Trace:\n{3}\n".
    332         format(target_id, ".", name, value))

Py4JJavaError: An error occurred while calling o135.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 4.0 failed 1 times, most recent failure: Lost task 0.0 in stage 4.0 (TID 4) (host.docker.internal executor driver): org.apache.spark.SparkException: Python worker exited unexpectedly (crashed)
    at org.apache.spark.api.python.BasePythonRunner$ReaderIterator$$anonfun$1.applyOrElse(PythonRunner.scala:601)
    at org.apache.spark.api.python.BasePythonRunner$ReaderIterator$$anonfun$1.applyOrElse(PythonRunner.scala:583)
    at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:38)
    at org.apache.spark.api.python.PythonRunner$$anon$3.read(PythonRunner.scala:772)
    at org.apache.spark.api.python.PythonRunner$$anon$3.read(PythonRunner.scala:749)
    at org.apache.spark.api.python.BasePythonRunner$ReaderIterator.hasNext(PythonRunner.scala:514)
    at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37)
    at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:491)
    at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460)
    at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460)
    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
    at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
    at org.apache.spark.sql.execution.WholeStageCodegenExec$$anon$1.hasNext(WholeStageCodegenExec.scala:760)
    at org.apache.spark.sql.execution.SparkPlan.$anonfun$getByteArrayRdd$1(SparkPlan.scala:388)
    at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2(RDD.scala:891)
    at org.apache.spark.rdd.RDD.$anonfun$mapPartitionsInternal$2$adapted(RDD.scala:891)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:367)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:331)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:92)
    at org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:161)
    at org.apache.spark.scheduler.Task.run(Task.scala:139)
1 resposta

Oi Arthur, tudo bem?

O erro que você está recebendo pode estar relacionado a diferentes causas. Então, peço que você faça algumas verificações para identificar o problema.

Primeiro, verifique as versões do Apache Spark, Python, e Java. Para o Spark 3. em diante, é recomendado utilizar a versão Python 3.7 ou superior e Java na versão 7 ou superior. Os comandos para fazer essas verificações são:

  • Python:

python --version

  • Spark

spark-submit --version

  • Java

java -version

Também peço que verifique os caminhos das variáveis de ambiente. Eles devem estar certinhos para que o Spark, e o Java sejam localizados corretamente. Então verifique se os.environ["JAVA_HOME"] e o os.environ["SPARK_HOME"] estão apontando para o caminho correto.

Como você está utilizando o VSCode, peço que verifique se seguiu todos os passos da aula Utilizando Spark no Windows

Espero ter ajudado e fico à disposição.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado