pyspark api 在 yarn-client 模式下调用需要相同版本的 python
What pyspark api calls requiere same version of python in workers in yarn-client mode
通常我 运行 我的代码在驱动程序中的 Python 版本与工作节点中的代码不同,使用 yarn-client 模式。
例如,我通常在驱动程序中使用 python3.5,在 worker 中使用默认的 python2.6,这很好用。
我目前在一个项目中,我们需要调用
sqlContext.createDataFrame
但这似乎试图在工作人员中的 python 中执行这句话,然后我得到了在工作人员中安装相同版本的 python 的要求,这是我试图避免的.
所以,要使用 "sqlContext.createDataFrame",驱动程序和工作程序必须具有相同的 python 版本?
如果是这样,其他哪个 "pure" pyspark.sql api 调用也会有此要求?
谢谢,
何塞
- 是的,相同的 Python 版本是一般要求。某些 API 调用可能不会失败,因为没有 Python 执行器在使用,但它不是有效配置。
- 与 Python 代码交互的每个调用,如
udf
或 DataFrame.rdd.*
都会触发相同的异常。
- 如果您想避免升级集群 Python 然后在驱动程序上使用 Python 2。
通常,许多 pyspark 操作只是在 JVM 上调用 spark 操作的包装器。对于这些操作,worker 中使用什么版本的 python 并不重要,因为没有 python 在 worker 上执行,只有 JVM 操作。
此类操作的示例包括从文件中读取数据帧、不需要 python objects/functions 作为输入的所有内置函数等。
一旦一个函数需要一个实际的 python 对象或函数,这就变得有点棘手了。
例如,假设您想使用 UDF 并使用 lambda x: x+1 作为函数。
Spark 并不知道函数是什么。相反,它将序列化并将其发送给反序列化它的工人。
要让这个 serialization/de-serialization 流程正常工作,双方的版本需要兼容,但通常情况并非如此(尤其是在主要版本之间)。
所有这些都让我们创建了DataFrame。例如,如果您使用 RDD 作为参数之一,则 RDD 将包含 python 个对象作为记录,这些对象需要进行序列化和反序列化,因此必须具有相同的版本。
通常我 运行 我的代码在驱动程序中的 Python 版本与工作节点中的代码不同,使用 yarn-client 模式。
例如,我通常在驱动程序中使用 python3.5,在 worker 中使用默认的 python2.6,这很好用。
我目前在一个项目中,我们需要调用
sqlContext.createDataFrame
但这似乎试图在工作人员中的 python 中执行这句话,然后我得到了在工作人员中安装相同版本的 python 的要求,这是我试图避免的.
所以,要使用 "sqlContext.createDataFrame",驱动程序和工作程序必须具有相同的 python 版本?
如果是这样,其他哪个 "pure" pyspark.sql api 调用也会有此要求?
谢谢, 何塞
- 是的,相同的 Python 版本是一般要求。某些 API 调用可能不会失败,因为没有 Python 执行器在使用,但它不是有效配置。
- 与 Python 代码交互的每个调用,如
udf
或DataFrame.rdd.*
都会触发相同的异常。 - 如果您想避免升级集群 Python 然后在驱动程序上使用 Python 2。
通常,许多 pyspark 操作只是在 JVM 上调用 spark 操作的包装器。对于这些操作,worker 中使用什么版本的 python 并不重要,因为没有 python 在 worker 上执行,只有 JVM 操作。
此类操作的示例包括从文件中读取数据帧、不需要 python objects/functions 作为输入的所有内置函数等。
一旦一个函数需要一个实际的 python 对象或函数,这就变得有点棘手了。 例如,假设您想使用 UDF 并使用 lambda x: x+1 作为函数。 Spark 并不知道函数是什么。相反,它将序列化并将其发送给反序列化它的工人。
要让这个 serialization/de-serialization 流程正常工作,双方的版本需要兼容,但通常情况并非如此(尤其是在主要版本之间)。
所有这些都让我们创建了DataFrame。例如,如果您使用 RDD 作为参数之一,则 RDD 将包含 python 个对象作为记录,这些对象需要进行序列化和反序列化,因此必须具有相同的版本。