【问题标题】:pyspark: Method isBarrier([]) does not existpyspark:方法 isBarrier([]) 不存在
【发布时间】:2019-07-26 01:41:03
【问题描述】:

我正在尝试使用pyspark 遵循以下一些 hello-word 级别的示例来学习 Spark。我收到“方法 isBarrier([]) 不存在”错误,代码下方包含完整错误。

from pyspark import SparkContext

if __name__ == '__main__':
    sc = SparkContext('local[6]', 'pySpark_pyCharm')
    rdd = sc.parallelize([1, 2, 3, 4, 5, 6, 7, 8])
    rdd.collect()
    rdd.count()

虽然,当我直接在命令行中启动 pyspark 会话并输入相同的代码时,它工作正常:

我的设置:

  • Windows 10 Pro x64
  • python 3.7.2
  • spark 2.3.3 hadoop 2.7
  • pyspark 2.4.0

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    问题是 Spark JVM 库版本与 PySpark 之间的不兼容。一般来说,PySpark 版本必须与您的 Spark 安装版本完全匹配(虽然理论上匹配主要和次要版本就足够了,维护版本中的一些不兼容性have been introduced in the past)。

    换句话说,Spark 2.3.3 与 PySpark 2.4.0 不兼容,您必须将 Spark 升级到 2.4.0 或将 PySpark 降级到 2.3.3。

    整体 PySpark 并非设计用于独立库。虽然PyPi package 是一个方便的开发工具(通常只安装一个包比手动扩展PYTHONPATH 更容易),但对于实际部署,最好坚持使用与实际 Spark 部署捆绑的 PySpark 包。

    【讨论】:

    • 成功了,谢谢!虽然这有点疯狂,但一个包如何依赖于另一个包的确切版本,这就像零向后兼容性。你认为这是 Spark 的问题还是 PySpark 的问题?默认情况下,我只是假设这是 PySpark 根据依赖方向的问题。
    • 我不会这么说的。 PySpark 和 Spark 本身不被视为单独的项目,并且发布和开发周期紧密相连。如果出现问题,更多的是 PySpark 包(或其他来宾语言库)处于混乱状态。提供这些是为了使开发更容易(因为手动配置可能很乏味,例如参见 in Pythonin SparkR),但从未打算用于生产。
    • 我明白了,“不被视为单独的项目”,这是有道理的。
    【解决方案2】:

    尝试使用

    启动您的 python 脚本/会话
    import findspark
    findspark.init()
    

    根据 spark 安装目录更新 sys.path。为我工作。

    【讨论】:

      【解决方案3】:

      尝试使用 Java 8(而不是较新版本)并使用安装 findspark

      pip install findspark
      

      然后尝试在你的 python 脚本 /session 开头导入它

      import findspark
      findspark.init()
      from pyspark import SparkContext
      

      这对我有用!

      【讨论】:

        猜你喜欢
        • 2019-09-24
        • 1970-01-01
        • 2019-04-26
        • 2017-04-12
        • 2020-09-24
        • 1970-01-01
        • 2021-02-06
        • 2021-08-18
        • 1970-01-01
        相关资源
        最近更新 更多