如何使用sbt将python和Scala文件一起包含在jar文件中?

如何使用sbt将python和Scala文件一起包含在jar文件中?,scala,apache-spark,pyspark,sbt,Scala,Apache Spark,Pyspark,Sbt,目标: 使用scala和python文件构建一个jar,并将此jar提供给 pyspark和pyspark能够同时调用scala和python文件。主要 将在使用scala库的python文件中执行 内部使用py4j 如何使用SBT将python文件/包与scala文件一起包含在jar文件中 项目结构(任何工程均可变更) 示例build.sbt(用于子项目) 示例build.sbt(用于父项目) SBT版本=0.13.16 用于构建jar的SBT命令 "project child_pr

目标:

使用scala和python文件构建一个jar,并将此jar提供给 pyspark和pyspark能够同时调用scala和python文件。主要 将在使用scala库的python文件中执行 内部使用py4j

如何使用SBT将python文件/包与scala文件一起包含在jar文件中

项目结构(任何工程均可变更)

示例build.sbt(用于子项目)

示例build.sbt(用于父项目)

SBT版本=0.13.16

用于构建jar的SBT命令

"project child_project" assembly
具体问题:

  • 是否可以在一个jar中同时包含python和scala代码包
  • 是否可以将这个jar提供给pyspark并从中访问python和scala文件
  • 有什么建议/解决方法/更好的选择来实现目标吗

  • 我马上想到的解决方案是将
    .py
    文件放在
    main/resources
    目录下。这看起来更像是一种黑客行为,但可能是您想要的(尤其是python文件)

    更好的解决方案是将
    main/python
    定义为源目录,如中所述:

    sbt从
    非托管源目录
    收集
    源文件,默认情况下由
    scalaSource
    javaSource
    组成。在适当的配置中将目录添加到
    非托管源目录
    ,以添加源目录。例如,要添加额外的src作为包含主要源的附加目录

    Compile / unmanagedSourceDirectories += baseDirectory.value / "extra-src"
    
    在您的
    build.sbt
    中会出现以下内容:

    Compile / unmanagedSourceDirectories += baseDirectory.value / "python"
    

    尝试过这个,但不起作用。我已更新问题以反映此设置(父项目的sbt)。甚至尝试将python文件保存在
    scala
    源代码中,这也不起作用。还添加了有问题的SBT版本(0.13.16)。请重试干净的生成,删除目标目录,刷新SBT并重新启动SBT shell。现在,它似乎尊重设置,但由于编译错误而失败,显然是在构建python文件时。是否可以跳过python文件的编译?每次更改
    build.sbt
    都必须重新启动sbt shell。python文件在哪里?谢谢!python文件位于/parent\u project/child\u project/src/main/python目录中。标记为
    parent\u project/child\u project/src/main/python
    ,作为资源文件夹。SBT通常表现得很怪异。有时它将python文件放在jar中,有时不放。无论如何,这就是我采取的方法。使用build.sbt(parent one)
    Compile+=文件(“/parent\u project/child\u project/src/main/python”)中的非托管源目录中的以下项目定义将python包标记为添加资源。
    "project child_project" assembly
    
    Compile / unmanagedSourceDirectories += baseDirectory.value / "extra-src"
    
    Compile / unmanagedSourceDirectories += baseDirectory.value / "python"