首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pyspark适用于python2.7,但不是3.4。

pyspark适用于python2.7,但不是3.4。
EN

Stack Overflow用户
提问于 2017-01-29 01:58:50
回答 3查看 487关注 0票数 1

我在亚马逊的EMR集群上运行火星雨。我有一个非常简单的测试脚本,看看我是否可以使用spark submit向s3写入数据.

代码语言:javascript
运行
复制
from pyspark import SparkContext
sc = SparkContext()
numbers = sc.parallelize(range(100))
numbers.saveAsTextFile("s3n://my-bucket/test.txt")
sc.stop()

当我在python2.7环境中使用submit运行这个脚本时,它工作得很好。但是,当我试图在python3.4环境中运行相同的脚本时,我会得到以下的跟踪结果.

代码语言:javascript
运行
复制
Caused by: org.apache.spark.api.python.PythonException: Traceback (most recent call last):
File ".../pyspark/worker.py", line 161, in main 
    func, profiler, deserializer, serializer = read_command(pickleSer, infile)
File ".../pyspark/worker.py", line 54, in read_command
    command = serializer._read_with_length(file)
File ".../pyspark/serializers.py", line 164, in _read_with_length
    return self.loads(obj)
File ".../pyspark/serializers.py", line 419, in loads
    return pickle.loads(obj, encoding=encoding)
AttributeError: Can't get attribute 'unicode' on <module 'builtins' (built-in)>

我正在使用conda并通过设置PYSPARK_PYTHONPYSPARK_DRIVER_PYTHON变量来操作python环境。

在python 3中使用saveAsTextFile有问题吗?还是我在设置python 3环境时遗漏了一步?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-30 22:01:41

好的,看起来这与python3无关,一切都与我的conda环境有关。简而言之,我在我的bootstrap.sh中设置了一个conda环境,但实际上我只在主节点上激活了它。所以主节点使用的是conda,但是工作人员使用的是system。

我现在的解决方案是设置PYSPARK_PYTHON=/home/hadoop/miniconda3/envs/myenv/python

是否有更好的方法在工作节点上激活我的conda环境?

票数 0
EN

Stack Overflow用户

发布于 2017-01-29 08:44:31

当您运行python 3.4时,您的EMR集群可能被配置为使用pyspark 2.7,这可能会在使用pyspark 2.7时引起问题。

下面的链接描述如何将Amazon配置为在python3.4中使用spark

我知道Python3.4.3安装在Amazon集群实例上,但是Spark和其他程序使用的默认Python版本是Python2.7.10。如何将默认Python版本更改为Python3并运行pyspark作业?

https://aws.amazon.com/premiumsupport/knowledge-center/emr-pyspark-python-3x/

range()函数在Python2和Python3中有不同的实现。

在Python2中,range()返回a list of numbers

在Python2中,range()返回a generator

因此,当您使用Python3时,您提供的输入是generator而不是list of numbers

关于range() 在python2 vs python3:中的不同之处的更多信息

Python2 https://docs.python.org/2/library/functions.html#range范围(开始、停止、步骤)

这是一个通用的函数,用于创建包含算术进度的列表。它最常用于for循环。参数必须是纯整数。如果省略step参数,则默认为1;如果省略start参数,则默认为0。完整表单返回普通整数开始、开始+步骤、开始+2*步骤、.的列表。如果step为正,则最后一个元素是最大的start +i*步骤小于stop;如果step为负值,则最后一个元素是最小的start +I*步骤大于stop。步骤不能为零(否则引发ValueError )。

示例:

代码语言:javascript
运行
复制
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Python3 https://docs.python.org/3/library/functions.html#func-range 范围(开始、停止、步骤)

range并不是一个函数,它实际上是一种不可变的序列类型,如range和sequence类型中所描述的那样-- list、tuple、range。

代码语言:javascript
运行
复制
>>> range(10)
range(0, 10)
票数 0
EN

Stack Overflow用户

发布于 2017-01-30 18:22:19

尝尝这个

导出PYSPARK_PYTHON=python3

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41916902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档