Python内置max函数抛出'dict'对象没有列表类型对象的属性'max'

Exp*_*rer 2 python built-in apache-spark pyspark

我有以下代码行作为我的 pyspark 管道的一部分(该硬编码列表是从配置文件中获取的),并且我正在 EMR 中运行我的管道。以下是 EMR Bootstrap 图像。内置函数将 int 列表视为 dict 并抛出以下错误。知道为什么我会看到这种奇怪的行为吗?

    max_n_days = __builtins__.max([10, 20])  
Run Code Online (Sandbox Code Playgroud)

EMR 引导程序:

 #!/bin/bash

sudo easy_install pip
sudo yum install -y tkinter tk-devel
sudo yum install -y python3-pip
sudo pip install boto3
sudo pip install configparser
sudo pip install paramiko
sudo pip install nltk
sudo pip install scipy
sudo pip install scikit-learn
sudo pip install pandas==0.24.2
sudo pip install -U keras
sudo pip install pyddq
sudo pip install torch
sudo pip install numpy 
sudo pip install future
sudo pip install keras==2.2.4
sudo pip install PyArrow==0.15.1
sudo pip install --upgrade awscli

Run Code Online (Sandbox Code Playgroud)

错误:

max_n_days = __builtins__.max([10, 20])  # use buildins reference
AttributeError: 'dict' object has no attribute 'max'
None

Run Code Online (Sandbox Code Playgroud)

注意:我使用“ builtins .max()”,因为“max”与 sql max 函数冲突。我在 emr 上使用 python 2.7,也尝试过“导入内置函数”,但找不到内置函数。根据其他堆栈溢出帖子中的建议,我已在集群上安装了“future”,但运气不佳,仍然找不到内置命令。

Alo*_*hal 5

来自文档(强调我的):

默认情况下,在__main__模块中时,__builtins__是内置模块builtins当在任何其他模块中时,是模块本身__builtins__的字典的别名builtins

上面解释了为什么您__builtins__在 Pyspark 作业中将其视为字典。

也来自相同的文档:

CPython 实现细节:用户不应触摸__builtins__;它严格来说是一个实施细节。想要覆盖builtins命名空间中的值的用户应该导入builtins模块并适当地修改其属性。

解决方案:使用import builtins后跟builtins.max().