1

我是新手,我的理解是:

  1. jar 就像一堆 java 代码文件
  2. 我安装的每个内部使用 spark(或 pyspark)的库都有自己的 jar 文件,驱动程序和执行程序都需要这些 jar 文件,以便它们执行与用户交互的包 API 调用。这些 jar 文件就像那些 API 调用的后端代码

问题:

  1. 为什么需要这些 jar 文件。为什么在 python 中拥有所有代码还不够?(我想答案是最初 Spark 是用 scala 编写的,它在那里将其依赖项作为 jar 分发。因此不必再次创建该代码库山,python 库只需通过一些转换 java 代码的转换器在 python 解释器中调用该 javacode到等效的python代码。请如果我理解正确)
  2. spark.driver.extraClassPath您可以在通过和创建 spark 上下文时指定这些 jar 文件的位置spark.executor.extraClassPath。虽然我猜这些都是过时的参数。指定这些 jar 文件位置的最新方法是什么?
  3. 我在哪里可以找到我安装的每个库的这些 jar?例如突触。关于包的 jar 文件所在位置的一般想法是什么?为什么这些库不明确它们的特定 jar 文件将在哪里?

我知道我在这里可能没有意义,我上面提到的部分只是我的预感,那就是它一定会发生。

那么,你能帮我理解一下这个关于罐子的整个业务,以及如何找到和指定它们吗?

4

1 回答 1

2

我安装的每个内部使用 spark(或 pyspark)的库都有自己的 jar 文件

你能告诉你要安装哪个库吗?

是的,即使您在 python 中编写代码,外部库也可以有 jar。

为什么 ?

这些库必须使用一些 UDF(用户定义函数)。Spark 在 java 运行时中运行代码。如果这些 UDF 是用 python 编写的,那么由于将数据转换为 python 可读的东西,将会有很多序列化和反序列化时间。

Java 和 Scala UDF 通常更快,这就是一些库附带 jar 的原因。

为什么在 python 中拥有所有代码还不够?

同样的原因,scala/java UDF 比 python UDF 更快。

指定这些 jar 文件位置的最新方法是什么?

你可以使用spark.jars.packages属性。它将复制到驱动程序和执行程序。

我在哪里可以找到我安装的每个库的这些 jar?例如突触。关于包的 jar 文件所在位置的一般想法是什么?

https://github.com/microsoft/SynapseML#python

他们在这里提到了需要什么罐子,即com.microsoft.azure:synapseml_2.12:0.9.4

import pyspark
spark = pyspark.sql.SparkSession.builder.appName("MyApp") \
            .config("spark.jars.packages", "com.microsoft.azure:synapseml_2.12:0.9.4") \
            .config("spark.jars.repositories", "https://mmlspark.azureedge.net/maven") \
            .getOrCreate()
import synapse.ml

你可以试试上面的片段吗?

于 2021-12-09T12:09:10.643 回答