目标:
用scala和python文件构建一个jar,并将这个jar提供给pyspark,这样就可以同时调用scala和python文件。主要执行将在python文件中进行,该文件将使用py4j在内部使用scala库。
如何使用sbt在jar文件和scala文件中包含python文件/包?
项目结构(任何工程均可变更)
parent_project
|
|-- child_project
|
|-- src
|
|-- main
|
|-- scala
|
|-- com.my_org.child_project
|
|-- s_file_1.scala
|-- s_file_2.scala
|-- python
|
|-- foo
|
|-- p_file_1.py
|-- p_file_2.py
|-- build.sbt -- for child project
|-- build.sbt -- for parent project
示例build.sbt(用于子项目)
name := "child_project"
version := "1.0.0"
scalaVersion := "2.11.1"
val sparkVersion = "2.4.4"
lazy val dependencies = new {}
libraryDependencies ++= Seq()
示例build.sbt(用于父项目)
lazy val child_project = project.in(file("parent_project/child_project"))
.dependsOn(parent % "provided->provided;compile->compile;test->test;runtime->runtime")
.settings(
name := "child_project",
organization := "com.my_org",
unmanagedSourceDirectories in Compile += file("/parent_project/child_project/src/main/python"),
includeFilter in (Compile, unmanagedSources) := "*.scala" || "*.java" || "*.py"
assemblySettings
)
sbt版本=0.13.16
用于构建jar的sbt命令
"project child_project" assembly
具体问题:
是否可以将python和scala代码打包在一个jar中?
有没有可能将这个jar提供给pyspark并从中访问python和scala文件?
有什么建议/解决方法/更好的实现目标的选择吗?
1条答案
按热度按时间kqhtkvqz1#
我马上想到的解决办法是
.py
下的文件main/resources
目录。这看起来更像一个黑客,但可能是你想要的(尤其是python文件)。更好的解决办法是
main/python
作为源目录,如中所述,添加其他源目录:sbt收集
sources
从unmanagedSourceDirectories
,默认情况下包括scalaSource
以及javaSource
. 将目录添加到unmanagedSourceDirectories
在适当的配置中添加一个源目录。例如,要添加额外的src作为包含主源的附加目录,那就是你的
build.sbt
: