与 conda 一起使用的“pandas on spark”问题:“没有名为 'pyspark.pandas' 的模块”,即使安装了 pyspark 和 pandas

我已经在 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

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

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

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

当我使用 pyspark 命令启动 pyspark shell 时,我确实可以导入 pandasnumpy 确认 PYSPARK_PYTHON 已正确设置( my_env 是唯一带有 {JXM= 的 conda env } 和 pandas 已安装,而且 numpypandas 没有安装在任何其他 python 安装上,即使在 conda 之外,最后如果我更改 numpy 我不再能够导入 PYSPARK_PYTHONpandas )。

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

numpy

但是,如果我尝试将上述数据帧转换为 ```
sc.parallelize([(1,2),(2,4),(3,5)]).toDF(["a", "b"]).show()


 [**pandas on spark**](https://spark.apache.org/docs/latest/api/python/user_guide/pandas_on_spark/index.html) 

返回:

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


我尝试  ```
AttributeError: 'DataFrame' object has no attribute 'to_pandas_on_spark'

```  import  `first`  (工作正常)和  `pandas`   `then`   `pyspark.pandas`  运行上述命令,但是当我运行

 `before` 

我收到以下错误:

import pyspark.pandas as ps



知道为什么会这样吗?

提前致谢
stack overflow Issue with 'pandas on spark' used with conda: "No module named 'pyspark.pandas'" even though both pyspark and pandas are installed
原文答案
author avatar

接受的答案

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


答案:

作者头像

pip install pyspark #need spark 3.3 import pyspark.pandas as ps