【问题标题】:spark-submit with python entry points带有 python 入口点的 spark-submit
【发布时间】:2017-10-23 18:11:17
【问题描述】:

我有一个脚本wordcount.py
我使用 setuptools 创建了一个名为 wordcount 的入口点,因此现在我可以从系统中的任何位置调用该命令。
我正在尝试通过 spark-submit(命令:spark-submit wordcount)执行它,但它失败并出现以下错误:

Error: Cannot load main class from JAR file:/usr/local/bin/wordcount Run with --help for usage help or --verbose for debug output

但是,当我提供 python 脚本的路径时,完全相同的命令可以正常工作(命令:spark-submit /home/ubuntu/wordcount.py)

wordcount.py 的内容

import sys
from operator import add

from pyspark.sql import SparkSession

def main(args=None):
    if len(sys.argv) != 2:
        print("Usage: wordcount <file>", file=sys.stderr)
        exit(-1)

    spark = SparkSession\
        .builder\
        .appName("PythonWordCount")\
        .getOrCreate()

    lines = spark.read.text(sys.argv[1]).rdd.map(lambda r: r[0])
    counts = lines.flatMap(lambda x: x.split(' ')) \
                  .map(lambda x: (x, 1)) \
                  .reduceByKey(add)
    output = counts.collect()
    for (word, count) in output:
        print("%s: %i" % (word, count))

    spark.stop()

if __name__ == "__main__":
    main()

你知道有没有办法绕过这个?
提前非常感谢。

【问题讨论】:

    标签: python apache-spark entry-point spark-submit


    【解决方案1】:

    当您运行spark-submit wordcount 时,它会将wordcount 视为将要执行的类的jar 文件。
    此外,它会尝试在路径 /usr/local/bin 中查找 jar,因为您尚未指定类路径。
    请提供wordcount 文件的内容。如果可能,在使用spark-submit 执行时尝试提供wordcount 的路径。

    查看此链接了解更多信息。在 spark-submit 命令上:https://spark.apache.org/docs/latest/submitting-applications.html

    【讨论】:

      【解决方案2】:

      我发现如果您将入口点重命名为具有.py 后缀,spark-submit 将接受它作为 python 应用程序:

      entry_points={
          'console_scripts': [
              'wordcount.py = mymodule.wordcount:main',
          ],
      }
      

      然后按预期接受提交:

      spark-submit ./bin/wordcount.py
      

      【讨论】:

        猜你喜欢
        • 2017-10-29
        • 2021-02-01
        • 1970-01-01
        • 2019-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-06
        相关资源
        最近更新 更多