如何运行 pyspark应用是egg分布式的?

How to run pyspark application which is egg distributed?

我有一个简单的 pyspark 应用程序,它是 运行ning 但我想 运行 它的 egg 可分发而不是管理大量 .py 文件。作为入门应用程序,它仅读取文件并显示它。

项目层次结构如下:

DisplayStats
|
|__ src
|   |___ displayStats.py
|   |___ __init__.py
|
|__ __main__.py
|__ setup.py 

main.py:

代码
from src import displayStats

if __name__ == '__main__':
    displayStats.showStats()

displayStats.py代码:

from pyspark.sql import SparkSession
spark = SparkSession.builder
               .master("local")
               .appName("gill")
               .getOrCreate()
df= spark.read.load('rootPath/fileName.csv', format='csv', header='true')
df.show()

setup.py代码:

setup(name='displayStats',
      version='0.0.1',
      description='A sample PySpark application',
      author='Bilal',
      py_moudles=['__main__']
      packages=['src'],
      zip_safe=False)

制作鸡蛋使用:

python setup.py bdist_egg

我得到了这个 egg 文件:

displayStats-0.0.1-py2.7.egg

现在我想 spark-submit 这个 egg 文件,我尝试了这两个命令:

1) spark-submit --master local displayStats-0.0.1-py2.7.egg

I get this exception: 
Exception in thread "main" org.apache.spark.SparkException: Cannot load main class from JAR file:/D:/displayStats/dist/displayStats-0.0.1-py2.7.egg

如果我在命令中给出 Main class Name(我认为 Main class Name仅当我们有 scala 或 java 项目时才需要,因为我在 main.py 中没有 class:

2) spark-submit --master local --class __main__ gill-0.0.1-py2.7.egg

Command Prompt shows these 4 warnings but job is not submitted:
19/10/08 15:34:19 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
log4j:WARN No appenders could be found for logger (org.apache.spark.deploy.SparkSubmit$$anon).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

请在这种情况下指导我,如果我压缩它们,我可以 运行 一份工作,但我想要 运行 egg 文件。我还没有在网上找到任何解决方案。

谢谢。

您使用的选项不正确,python 您应该使用 --py-files

spark-submit --master local --py-files  displayStats-0.0.1-py2.7.egg __main__.py

部分摘自 spark-submit 帮助

--py-files PY_FILES     Comma-separated list of .zip, .egg, or .py files to place on the PYTHONPATH for Python apps.
--class CLASS_NAME      Your application's main class (for Java / Scala apps).
--name NAME             A name of your application.
--jars JARS             Comma-separated list of jars to include on the driver and executor classpaths.