'pandas on spark' 与 conda 一起使用的问题:"No module named 'pyspark.pandas'" 即使同时安装了 pyspark 和 pandas

Issue with 'pandas on spark' used with conda: "No module named 'pyspark.pandas'" even though both pyspark and pandas are installed

我已经在 Ubuntu 20.04 上安装了 Spark 3.1.3 和 Anaconda 4.12.0。 我已将 PYSPARK_PYTHON 设置为名为 my_env

的 conda 环境的 python bin
export PYSPARK_PYTHON=~/anaconda3/envs/my_env/bin/python

我使用 pip 在 conda 环境 my_env 上安装了几个包。这是 pip freeze 命令的部分输出:

numpy==1.22.3
pandas==1.4.1
py4j==0.10.9.3
pyarrow==7.0.0

N.B:pyspark 未安装在 conda 环境 my_env 上。我希望能够在不同的 conda 环境中启动 pyspark shell,而不必在每个环境中重新安装 pyspark(我只想修改 PYSPARK_PYTHON)。这也可以避免在不同的 conda 环境中使用不同版本的 Spark(这有时是可取的,但并非总是如此)。

当我使用 pyspark 命令启动 pyspark shell 时,我确实可以导入 pandasnumpy,这确认 PYSPARK_PYTHON 已正确设置( my_env 是唯一安装了 pandasnumpy 的 conda env,此外 pandasnumpy 没有安装在任何其他 python 安装上,即使在外面conda,最后,如果我更改 PYSPARK_PYTHON,我将无法再导入 pandasnumpy)。

在 pyspark shell 中,以下代码工作正常(创建并显示玩具 Spark 数据框):

sc.parallelize([(1,2),(2,4),(3,5)]).toDF(["a", "b"]).show()

但是,如果我尝试将上述数据帧转换为 pandas on spark 数据帧,则它不起作用。命令

sc.parallelize([(1,2),(2,4),(3,5)]).toDF(["t", "a"]).to_pandas_on_spark()

returns:

AttributeError: 'DataFrame' object has no attribute 'to_pandas_on_spark'

我尝试导入pandas(效果很好)然后然后pyspark.pandasbefore 运行ning 上面的命令但是当我 运行

import pyspark.pandas as ps

我得到以下错误:

ModuleNotFoundError: No module named 'pyspark.pandas'

知道为什么会这样吗?

提前致谢

来自here,看来你需要apache spark 3.2,而不是3.1.3。更新到 3.2,您将拥有所需的 API.