繁体   English   中英

将火花 dataframe 转换为 pandas dataframe - ImportError:必须安装 Z251D2BBFE9A3B95E569=1CEB39。

[英]converting spark dataframe to pandas dataframe - ImportError: Pandas >= 0.19.2 must be installed

我正在尝试将火花DataFrame转换为 pandas DataFrame 我正在尝试在 EMR 上使用 Jupyter 笔记本。 我正在尝试以下错误。

Pandas 库安装在我的用户下的主节点上。 并使用 spark shell (pyspark) 我能够在该主节点上将 df 转换为 pandas df。

以下命令已在所有主节点上执行:

 pip --no-cache-dir install pandas --user

以下是在主节点上工作。 但不是来自pyspark 笔记本:

import Pandas as pd

错误:

名为“熊猫”的模块
回溯(最近一次通话最后):
ModuleNotFoundError:没有名为“Pandas”的模块

更新:

我可以从 python 笔记本运行以下代码:

import pandas as pd 
pd.DataFrame(["a", "b"], columns=['q_data']) 

您需要驱动程序节点上的 pandas 转换为 pandas df 所有数据都收集到驱动程序然后转换

当我们运行 EMR 5.33.0 步骤来创建和操作数据帧时,我们也不断收到以下错误。

  File "/mnt/tmp/spark-49de09b2-5f77-4c46-a562-eed3742852be/test.py", line 131, in <module>
    stores = df.toPandas()['storename'].unique().tolist()
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/dataframe.py", line 2086, in toPandas
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 129, in require_minimum_pandas_version
ImportError: Pandas >= 0.19.2 must be installed; however, it was not found.

这是一个误导性错误,因为它是由 numpy 和 pandas 包的版本不匹配冲突引起的。 我们的 AWS 支持能够找到这个。

EMR 在安装一组库的自定义引导操作(您指定)之后运行它自己的引导。 安装这些版本的“numpy”包会导致冲突。例如,当我们使用引导脚本安装“pandas==1.3.0”时,它会安装“numpy=1.21.2”。 但是,作为 EMR 引导程序(也称为应用程序配置)的一部分,它正在安装“numpy=1.16.5”。 因此,numpy 版本中 pip3 解释的内容与 python/pyspark 解释的内容不匹配。

要解决这个问题,

第 1 步:创建辅助引导操作脚本并将其上传到 S3

#!/bin/bash

# keep checking the status of node provisioning, once it's SUCCESSFUL, run your code

while true; do
    NODEPROVISIONSTATE=` sed -n '/localInstance [{]/,/[}]/{
                /nodeProvisionCheckinRecord [{]/,/[}]/ {
                /status: / { p }
                /[}]/a
                }
                /[}]/a
                }' /emr/instance-controller/lib/info/job-flow-state.txt | awk ' { print $2 }'`

if [ "$NODEPROVISIONSTATE" == "SUCCESSFUL" ]; then
    sleep 10;
    echo "Running my post provision bootstrap"

    sudo pip3 install pandas==1.3.0

fi

sleep 10;
done

第 2 步:修改现有的引导脚本

#!/bin/bash -x
aws s3 cp s3://<BUCKET>/secondary-bootstrap.sh /home/hadoop/secondary-bootstrap.sh && sudo bash /home/hadoop/secondary-bootstrap.sh &
exit 0

第 3 步:重新启动您的 EMR 集群

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM