簡體   English   中英

spark-submit 與 python 入口點

[英]spark-submit with python entry points

我有一個腳本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()

你知道有沒有辦法繞過這個?
非常感謝。

當您運行spark-submit wordcount ,它將 wordcount 視為將要執行類的 jar 文件。
此外,它會嘗試在路徑/usr/local/bin查找 jar,因為您尚未指定類路徑。
請提供wordcount文件的內容。 如果可能,請嘗試在使用spark-submit執行時提供wordcount的路徑。

查看此鏈接以獲取更多信息。 關於 spark-submit 命令: https : //spark.apache.org/docs/latest/submitting-applications.html

我發現如果你將入口點重命名為.py后綴, spark-submit會接受它作為一個 python 應用程序:

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

然后提交按預期被接受:

spark-submit ./bin/wordcount.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM