【问题标题】:How to run pyspark application which is egg distributed?如何运行鸡蛋分发的pyspark应用程序?
【发布时间】:2020-02-05 15:31:14
【问题描述】:

我有一个简单的 pyspark 应用程序正在运行,但我想运行它的 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

我得到了这个单一的鸡蛋文件:

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 项目时才需要,因为我没有 class in 主.py):

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$2).
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-2.7 apache-spark pyspark egg


    【解决方案1】:

    您没有使用正确的选项,对于 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.
    

    【讨论】:

    • 感谢您的回复,我什至尝试过 --py-files 选项,但是对于这个命令,我们应该分别有两个文件。 .EGG 文件和一个单独的 main.py 文件。我想要的是在集群中附加 egg 并告诉它在这种情况下的模块名称 main.py 运行。就像在 scala 中一样,我们将 jar 提交到集群,我们的主文件在 jar 中。
    • @BilalShafqat 我认为这是不可能的。这就是它的实施方式。
    • @BilalShafqat 我遇到了同样的问题,还没有找到解决方案。看起来指定一个“单独的”Python 文件是强制性的。看起来设计很差。
    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 2011-01-02
    • 2017-03-08
    • 2018-06-03
    • 2017-02-28
    • 1970-01-01
    相关资源
    最近更新 更多