Как правильно настроить конфигурацию SparkContext в Jupyter Notebook?

#python #apache-spark #pyspark #jupyter-notebook

#python #apache-spark #pyspark #jupyter-notebook

Вопрос:

Я новичок в spark, и я пытаюсь настроить SparkContext, но, к сожалению, я получил сообщения об ошибках..

Я написал этот код:

 from pyspark import SparkConf,SparkContext
from pyspark.streaming import StreamingContext
from pyspark.sql import Row,SQLContext
import sys
import requests

# create spark configuration

conf = SparkConf()
conf.setAppName("TwitterStreamApp")  

# create spark context with the above configuration
sc = SparkContext(conf=conf)
 

И я получил эту ошибку:

 Py4JError                                 Traceback (most recent call last)
<ipython-input-97-b0f526d72e5a> in <module>
      1 # create spark context with the above configuration
----> 2 sc = SparkContext(conf=conf)

~anaconda3libsite-packagespysparkcontext.py in __init__(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, gateway, jsc, profiler_cls)
    133             # If an error occurs, clean up in order to allow future SparkContext creation:
    134             self.stop()
--> 135             raise
    136 
    137     def _do_init(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer,

~anaconda3libsite-packagespysparkcontext.py in _do_init(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, jsc, profiler_cls)
    211         self.pythonVer = "%d.%d" % sys.version_info[:2]
    212 
--> 213         if sys.version_info < (3, 6):
    214             with warnings.catch_warnings():
    215                 warnings.simplefilter("once")

~anaconda3libsite-packagespy4jjava_gateway.py in __getattr__(self, name)
   1528                     answer, self._gateway_client, self._fqn, name)
   1529         else:
-> 1530             raise Py4JError(
   1531                 "{0}.{1} does not exist in the JVM".format(self._fqn, name))
   1532 

Py4JError: org.apache.spark.api.python.PythonUtils.isEncryptionEnabled does not exist in the JVM
 

Кроме того, в system ENV я добавил JAVA_HOME, SPARK_HOME .. но он не работает.

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

1. Для меня ваш код отлично работает в Jupyter Notebook. Не могли бы вы поделиться некоторой информацией о вашей установке Spark / Python и номере версии.

2. Версия Spark: 2.4.7. Версия Python: 3.9.

3. Версия Spark 2.4.7. Версия Python 3.9. Также в системных переменных я установил: HADOOP_HOME, JAVA_HOME, SPARK_HOME, SPARK_LOCAL_IP (я пытался решить проблему), но это не работает.. Я получил то же сообщение об ошибке. И это все, что я установил и добавил.

4. Установка Spark может быть сложной в первый раз, поэтому, если вам нужна только Spark с Python, я бы посоветовал установить PySpark с pip помощью or conda . Это может помочь.

Ответ №1:

Я думаю, что при настройке вы в конечном итоге запускаете несколько SparkContexts одновременно.

Попробуйте вместо этого эту простую настройку:

 from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('TwitterStreamApp').getOrCreate()
 

если вы НЕ выполняете потоковую передачу, предполагая, что вы читаете csv-файл с заголовками

 staticDF = spark.read.csv('source/file/path/here', header = True, inferSchema = True)
 

если вы выполняете потоковую передачу, повторите формат csv

 streamingDF = spark.readStream 
   .schema(provide schema here)
   .option('....') // whatever your options are
   .csv('source/file/path/here') 
 

Возможно, вам захочется привыкнуть к идее предоставления или построения схемы при чтении ваших данных, это повышает скорость обработки, чем когда spark пытается ее вывести.