【问题标题】:Add jars for mmlspark in spark classpath在 spark 类路径中为 mmlspark 添加 jars
【发布时间】:2021-10-26 07:24:46
【问题描述】:

我的要求是在我的 pyspark 应用程序中使用 com.microsoft.ml.spark:mmlspark_2.12:1.0.0-rc3-43-54379bf7-SNAPSHOT。我无法使用 --package 和 --repositories 选项,因为部署环境中没有互联网连接。 但是,我可以做的一个是从 maven 下载依赖项并将所有内容打包到 Docker 映像中以进行部署。

为了下载依赖,我使用了:

mvn dependency:get -DremoteRepositories="https://mmlspark.azureedge.net/maven" -Dartifact="com.microsoft.ml.spark:mmlspark_2.12:1.0.0-rc3-43-54379bf7-SNAPSHOT"

这会下载/home/user/.m2/repository 位置中的所有依赖项。

现在为了在我的 spark 应用程序中使用它们,我尝试了几件事: 1.) 提取所有 jars 使用--jars /user/home/jar_files/*,我已经复制了所有下载的 jars。 ==> 但是,这会失败并出现错误:

Exception in thread "main" org.apache.spark.SparkException: No main class set in JAR; please specify one with --class.
    at org.apache.spark.deploy.SparkSubmit.error(SparkSubmit.scala:968)

2.) 其次,我复制了所有必要的 jar 并将它们复制到 site-package/pyspark/jars/ 位置。我的spark-submit 命令没有任何额外的选项。失败并出现错误:

    from mmlspark.lightgbm._LightGBMRegressor import _LightGBMRegressor
ModuleNotFoundError: No module named 'mmlspark.lightgbm._LightGBMRegressor'

3.) 我也尝试使用 --files 代替 --jars,但效果不佳。

我需要有关如何在我的 pyspark 应用程序中添加这些 jar 的帮助。

谢谢

【问题讨论】:

    标签: maven pyspark jar


    【解决方案1】:

    提交申请时只需使用--packages--repositories即可:

    spark-submit --repositories https://mmlspark.azureedge.net/maven \
      --packages com.microsoft.ml.spark:mmlspark_2.12:1.0.0-rc3-43-54379bf7-SNAPSHOT \
      ...
    

    pyspark 对我来说效果很好

    Welcome to
          ____              __
         / __/__  ___ _____/ /__
        _\ \/ _ \/ _ `/ __/  '_/
       /__ / .__/\_,_/_/ /_/\_\   version 3.1.2
          /_/
    
    Using Python version 3.7.9 (default, Aug 31 2020 07:22:35)
    Spark context Web UI available at http://...:4040
    Spark context available as 'sc' (master = local[*], app id = local-1629967436995).
    SparkSession available as 'spark'.
    >>> from mmlspark.lightgbm._LightGBMRegressor import _LightGBMRegressor
    >>>
    

    这将获取必要的包及其依赖项。有关自定义依赖项的更多详细信息,请参阅Spark documentation

    如果您没有互联网连接,那么您可以使用以下选项简单地指向本地 Maven 存储库:

    --repositories file:///home/user/.m2/repository
    

    【讨论】:

    • 我不能使用它,因为部署基础设施没有互联网连接来下载包。因此,我必须在我的 docker 映像中预先打包所有内容
    • 更新了答案,包含如何在没有外部连接的情况下运行
    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2013-10-02
    • 2016-02-25
    • 2012-03-14
    • 2011-06-15
    相关资源
    最近更新 更多