Ошибка Pyspark на Datapro c при создании фрейма данных с деталями схемы - PullRequest
1 голос
/ 29 января 2020

У меня есть кластер Datapro c с Анакондой. Я создал виртуальную среду. внутри anaconda my-env, так как мне нужно установить туда RDkit с открытым исходным кодом, и, следовательно, я снова установил PySpark (не используя предварительно установленный). Теперь с кодом ниже я получаю ошибку в my-env, но не за пределами my-env

Код:

from pyspark.sql.types import StructField, StructType, StringType, LongType
from pyspark.sql import SparkSession
from py4j.protocol import Py4JJavaError
spark = SparkSession.builder.appName("test").getOrCreate()

fields = [StructField("col0", StringType(), True),
          StructField("col1", StringType(), True),
          StructField("col2", StringType(), True),
          StructField("col3", StringType(), True)]
schema = StructType(fields)

chem_info = spark.createDataFrame([], schema)

Это ошибка, которую я получаю:

  File
"/home/.conda/envs/my-env/lib/python3.6/site-packages/pyspark/sql/session.py",
line 749, in createDataFrame
    jrdd = self._jvm.SerDeUtil.toJavaArray(rdd._to_java_object_rdd())   File
"/home/.conda/envs/my-env/lib/python3.6/site-packages/pyspark/rdd.py",
line 2297, in _to_java_object_rdd
    rdd = self._pickled()   File "/home/.conda/envs/my-env/lib/python3.6/site-packages/pyspark/rdd.py",
line 196, in _pickled
    return self._reserialize(AutoBatchedSerializer(PickleSerializer()))   File
"/home/.conda/envs/my-env/lib/python3.6/site-packages/pyspark/rdd.py",
line 594, in _reserialize
    self = self.map(lambda x: x, preservesPartitioning=True)   File "/home/.conda/envs/my-env/lib/python3.6/site-packages/pyspark/rdd.py",
line 325, in map
    return self.mapPartitionsWithIndex(func, preservesPartitioning)   File
"/home/.conda/envs/my-env/lib/python3.6/site-packages/pyspark/rdd.py",
line 365, in mapPartitionsWithIndex
    return PipelinedRDD(self, f, preservesPartitioning)   File "/home/.conda/envs/my-env/lib/python3.6/site-packages/pyspark/rdd.py",
line 2514, in __init__
    self.is_barrier = prev._is_barrier() or isFromBarrier   File "/home/.conda/envs/my-env/lib/python3.6/site-packages/pyspark/rdd.py",
line 2414, in _is_barrier
    return self._jrdd.rdd().isBarrier()   File "/home/.conda/envs/my-env/lib/python3.6/site-packages/py4j/java_gateway.py",
line 1257, in __call__
    answer, self.gateway_client, self.target_id, self.name)   File "/home/.conda/envs/my-env/lib/python3.6/site-packages/pyspark/sql/utils.py",
line 63, in deco
    return f(*a, **kw)   File "/home/.conda/envs/my-env/lib/python3.6/site-packages/py4j/protocol.py",
line 332, in get_return_value
    format(target_id, ".", name, value)) py4j.protocol.Py4JError: An error occurred while calling o57.isBarrier. Trace: py4j.Py4JException:
Method isBarrier([]) does not exist
        at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318)
        at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326)
        at py4j.Gateway.invoke(Gateway.java:274)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.GatewayConnection.run(GatewayConnection.java:238)
        at java.lang.Thread.run(Thread.java:748)

Можете ли вы помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 30 января 2020

Как уже упоминалось в pyspark : метод isBarrier ([]) не существует вопрос, эта ошибка вызвана несовместимостью между различными версиями Spark, установленными в кластере Datapro c и PySpark, которые вы вручную установили в ваша среда conda.

Чтобы решить эту проблему, вам нужно проверить версию Spark в кластере и установить соответствующую версию PySpark:

$ spark-submit --version
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.4
      /_/

Using Scala version 2.12.10, OpenJDK 64-Bit Server VM, 1.8.0_232

$ conda install pyspark==2.4.4
...