SparkSession.builder выбрасывает NotADirectoryError - PullRequest
1 голос
/ 04 февраля 2020

Я новичок в Spark / PySpark и пытаюсь использовать его для деревьев решений. Я получил полный пример дерева решений, работающий на основе учебника, но после перезагрузки (и незначительного обновления OSX) он больше не работает.

Я сузил проблему до минимального примера:

from pyspark.sql import SparkSession
print(SparkSession.builder.appName('test'))
spark = SparkSession.builder.appName('test').getOrCreate()
df = spark.read.csv('data/test.csv', header=True)

Сначала не удалось найти Spark, но после некоторой работы над моим .bash_profile я думаю, что эта проблема решено. Первые две строки выполняются без ошибок и выдают следующий вывод:

<pyspark.sql.session.SparkSession.Builder object at 0x108a89470>

Но третья строка теперь выдает NotADirectoryError.

---------------------------------------------------------------------------
NotADirectoryError                        Traceback (most recent call last)
<ipython-input-9-db2674edf6f2> in <module>
      1 from pyspark.sql import SparkSession
      2 print(SparkSession.builder.appName('test'))
----> 3 spark = SparkSession.builder.appName('test').getOrCreate()
      4 df = spark.read.csv('data/test.csv', header=True)

/anaconda3/envs/decisiontrees/lib/python3.5/site-packages/pyspark/sql/session.py in getOrCreate(self)
    171                     for key, value in self._options.items():
    172                         sparkConf.set(key, value)
--> 173                     sc = SparkContext.getOrCreate(sparkConf)
    174                     # This SparkContext may be an existing one.
    175                     for key, value in self._options.items():

/anaconda3/envs/decisiontrees/lib/python3.5/site-packages/pyspark/context.py in getOrCreate(cls, conf)
    365         with SparkContext._lock:
    366             if SparkContext._active_spark_context is None:
--> 367                 SparkContext(conf=conf or SparkConf())
    368             return SparkContext._active_spark_context
    369 

/anaconda3/envs/decisiontrees/lib/python3.5/site-packages/pyspark/context.py in __init__(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, gateway, jsc, profiler_cls)
    131                     " note this option will be removed in Spark 3.0")
    132 
--> 133         SparkContext._ensure_initialized(self, gateway=gateway, conf=conf)
    134         try:
    135             self._do_init(master, appName, sparkHome, pyFiles, environment, batchSize, serializer,

/anaconda3/envs/decisiontrees/lib/python3.5/site-packages/pyspark/context.py in _ensure_initialized(cls, instance, gateway, conf)
    314         with SparkContext._lock:
    315             if not SparkContext._gateway:
--> 316                 SparkContext._gateway = gateway or launch_gateway(conf)
    317                 SparkContext._jvm = SparkContext._gateway.jvm
    318 

/anaconda3/envs/decisiontrees/lib/python3.5/site-packages/pyspark/java_gateway.py in launch_gateway(conf)
     44     :return: a JVM gateway
     45     """
---> 46     return _launch_gateway(conf)
     47 
     48 

/anaconda3/envs/decisiontrees/lib/python3.5/site-packages/pyspark/java_gateway.py in _launch_gateway(conf, insecure)
     96                 def preexec_func():
     97                     signal.signal(signal.SIGINT, signal.SIG_IGN)
---> 98                 proc = Popen(command, stdin=PIPE, preexec_fn=preexec_func, env=env)
     99             else:
    100                 # preexec_fn not supported on Windows

/anaconda3/envs/decisiontrees/lib/python3.5/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds)
    674                                 c2pread, c2pwrite,
    675                                 errread, errwrite,
--> 676                                 restore_signals, start_new_session)
    677         except:
    678             # Cleanup if the child failed starting.

/anaconda3/envs/decisiontrees/lib/python3.5/subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
   1287                             else:
   1288                                 err_msg += ': ' + repr(orig_executable)
-> 1289                     raise child_exception_type(errno_num, err_msg)
   1290                 raise child_exception_type(err_msg)
   1291 

NotADirectoryError: [Errno 20] Not a directory

Документация не содержит никакой информации о том, почему getOrCreate() может выдать ошибку.

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

Редактировать (2 недели спустя): Для любых бедных душ, сталкивающихся с той же проблемой: я отказался от PySpark и теперь вместо этого использую RPath. Если я вернусь к этому и выясню это, я обновлю.

...