2
respostas

erro ao executar o comando pyspark

fiz todo o passo a passo porem ao executar o ultimo comando na console apresentou o seguinte erro

Python 3.8.10 (default, Sep 28 2021, 16:10:42)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
21/11/08 08:06:04 WARN Utils: Your hostname, andre-Virtual-Machine resolves to a loopback address: 127.0.1.1; using 172.17.19.25 instead (on interface eth0)
21/11/08 08:06:04 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
21/11/08 08:06:05 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
21/11/08 08:06:06 WARN SparkContext: Another SparkContext is being constructed (or threw an exception in its constructor). This may indicate an error, since only one SparkContext should be running in this JVM (see SPARK-2243). The other SparkContext was created at:
org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:247)
py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
py4j.Gateway.invoke(Gateway.java:238)
py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80)
py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69)
py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182)
py4j.ClientServerConnection.run(ClientServerConnection.java:106)
java.base/java.lang.Thread.run(Thread.java:833)
/home/andre/Documents/datapipeline/.env/lib/python3.8/site-packages/pyspark/python/pyspark/shell.py:42: UserWarning: Failed to initialize Spark session.
  warnings.warn("Failed to initialize Spark session.")
Traceback (most recent call last):
  File "/home/andre/Documents/datapipeline/.env/lib/python3.8/site-packages/pyspark/python/pyspark/shell.py", line 38, in <module>
    spark = SparkSession._create_shell_session()  # type: ignore
  File "/home/andre/Documents/datapipeline/.env/lib/python3.8/site-packages/pyspark/sql/session.py", line 553, in _create_shell_session
    return SparkSession.builder.getOrCreate()
  File "/home/andre/Documents/datapipeline/.env/lib/python3.8/site-packages/pyspark/sql/session.py", line 228, in getOrCreate
    sc = SparkContext.getOrCreate(sparkConf)
  File "/home/andre/Documents/datapipeline/.env/lib/python3.8/site-packages/pyspark/context.py", line 392, in getOrCreate
    SparkContext(conf=conf or SparkConf())
  File "/home/andre/Documents/datapipeline/.env/lib/python3.8/site-packages/pyspark/context.py", line 146, in __init__
    self._do_init(master, appName, sparkHome, pyFiles, environment, batchSize, serializer,
  File "/home/andre/Documents/datapipeline/.env/lib/python3.8/site-packages/pyspark/context.py", line 209, in _do_init
    self._jsc = jsc or self._initialize_context(self._conf._jconf)
  File "/home/andre/Documents/datapipeline/.env/lib/python3.8/site-packages/pyspark/context.py", line 329, in _initialize_context
    return self._jvm.JavaSparkContext(jconf)
  File "/home/andre/Documents/datapipeline/.env/lib/python3.8/site-packages/pyspark/python/lib/py4j-0.10.9.2-src.zip/py4j/java_gateway.py", line 1573, in __call__
    return_value = get_return_value(
  File "/home/andre/Documents/datapipeline/.env/lib/python3.8/site-packages/pyspark/python/lib/py4j-0.10.9.2-src.zip/py4j/protocol.py", line 326, in get_return_value
2 respostas

segue restante do erro

raise Py4JJavaError(
py4j.protocol.Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext.
: java.lang.NoClassDefFoundError: Could not initialize class org.apache.spark.storage.StorageUtils$
    at org.apache.spark.storage.BlockManagerMasterEndpoint.<init>(BlockManagerMasterEndpoint.scala:110)
    at org.apache.spark.SparkEnv$.$anonfun$create$9(SparkEnv.scala:348)
    at org.apache.spark.SparkEnv$.registerOrLookupEndpoint$1(SparkEnv.scala:287)
    at org.apache.spark.SparkEnv$.create(SparkEnv.scala:336)
    at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:191)
    at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:277)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:460)
    at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:247)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:238)
    at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80)
    at py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69)
    at py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182)
    at py4j.ClientServerConnection.run(ClientServerConnection.java:106)
    at java.base/java.lang.Thread.run(Thread.java:833)

Olá, André! Tudo bem com você?

Primeiramente gostaria de pedir desculpas pela demora em retornar.

Esse erro está acontecendo devido uma incompatibilidade de versão entre o Java instalado em sua máquina e a versão que o pyspark requer para funcionar corretamente. Ao consultarmos a documentação (em inglês) vemos o seguinte texto:

"O Spark é executado em Java 8/11, Scala 2.12, Python 3.6+ e R 3.5+. O suporte para Python 3.6 foi descontinuado a partir do Spark 3.2.0. O suporte do Java 8 anterior à versão 8u201 foi descontinuado a partir do Spark 3.2.0."

Logo, caso você esteja tentando executar o pyspark em uma versão do java diferente da 8 ou 11, será apresentado esse erro que você obteve. Para conferir a versão do java instalada em sua máquina, execute o comando:

java -version

Para solucionar esse problema é necessário instalar uma das versões requeridas e selecioná-la para ser usada. Para fazer a instalação execute o seguinte comando:

sudo apt install openjdk-8-jdk

Nesse comando estamos instalando o java 8. Porém somente realizar a instalação não é suficiente. Se você conferir novamente a versão instalada em sua máquina com o comando citado anteriormente verá que não é a 8 ainda.

Agora vamos selecionar a versão 8 para ser usada. Para isso execute o seguinte comando:

sudo update-alternatives --config java

A tela que aparecerá é algo parecido com isso:

Tela do terminal do ubuntu. Na imagem estão sendo executados 3 comandos. O primeiro é: java -version, usado para descobrir a versão em uso do java, que retorna openjdk 17.0.1 2021-10-19. O segundo comando é: sudo update-alternatives --config java, que retorna uma lista com todas as versões do java instaladas na máquina, que na imagem foram 3, a versão 17 a 11 e a 8. Após a exibição das versões instaladas há uma pergunta de qual versão o usuário deseja selecionar com um espaço para digitação, na imagem foi digitado o valor 3 que corresponde ao java 8. O terceiro e último comando é novamente java -version, para verificar se o java 8 foi realmente selecionado, é retornado openjdk version "1.8.0_312" que confirma que está selecionada a versão 8 do java. Há duas setas na cor vermelha apontando para os comandos java -version e uma caixa de marcação retangular na cor vermelha no comando sudo update-alternatives --config java.

Nessa imagem podemos perceber que inicialmente eu estava utilizando o java 17, executei o comando citado e selecionei a versão 8 para uso, conforme mostra a última verificação da versão.

Realizado os passos acima, tente executar novamente o comando pyspark e veja se soluciona seu problema.

Só uma detalhe, caso você tenha recebido uma mensagem de erro, como a mostrada abaixo, ao executar o comando ./bin/spark-shell, você soluciona da mesma forma que foi feito acima.

Tela do terminal do ubuntu. Na imagem está sendo executado o comando ./bin/spark-shell que retorna duas mensagens de erro: "console>:14: error: not found: value spark". Há duas setas na cor vermelha apontando para cada mensagem de erro.

Espero ter ajudado, mas se ainda persistir alguma dúvida estou sempre à disposição.

:)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!