公司交互式数据分析平台选择的是 Apache Zeppelin,可以配置并选择 Spark Interpreter 从而借助 Spark 来进行数据分析。在 Zeppelin 的一个 note 中,可以写 SQL 脚本(段落中使用 %sql
声明使用 SQL Interpreter)、Python 脚本(段落中使用 %pyspark
声明使用 Spark Interpreter),一个 note 中的多个 paragraph 可以使用不同的 interpreter,对于一些复杂的逻辑经常会使用 %pyspark
来借助 PySpark 运行 Python 脚本。
因为公司大数据项目主要是由 Java 代码写的,所以很多逻辑以及配置文件相关都是在 Java 代码中的。为了不在 Python 中重复写相同的逻辑,就需要使用 Python 来调用 Java 代码从而完成相应的逻辑。
Java 代码最终是打成 Jar 包配置在 Spark 中的,有一个比较烦人的地方是,通过 Py4J 虽然可以调用 Java 代码,但是由于没有启动 Spring 不能得到自动装配的能力,需要在 Python 代码中额外维护一份配置文件才能读取一些属性。在多个地方维护相同的文件,终究还是不方便。需要找到一种使用 Python 通过 Py4J 启动 Spring 的方法,这样获取到的 Java Bean 中就可以装配到配置属性了。
要想达到上述目的,需要 Java 代码和 Python 代码的配合。
- 在 Java 代码中,可以新增一个
SpringUtils
的类,在其中启动 Main Class,需要注意的一点是