我尝试在我的PC上安装Spark Release 2.4.0,该系统是win7_x64。
但是,当我尝试运行简单的代码来检查spark是否准备好工作时: 代码:
import os
from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster('local[*]').setAppName('word_count')
sc = SparkContext(conf=conf)
d = ['a b c d', 'b c d e', 'c d e f']
d_rdd = sc.parallelize(d)
rdd_res = d_rdd.flatMap(lambda x: x.split(' ')).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a+b)
print(rdd_res)
print(rdd_res.collect())
我收到此错误:
我打开worker.py文件检查代码。
我发现在2.4.0版中,代码是:
但是,在版本2.3.2中,代码为:
然后我重新安装spark-2.3.2-bin-hadoop2.7,代码工作正常。
此外,我发现了以下问题: ImportError: No module named 'resource'
所以,我认为spark-2.4.0-bin-hadoop2.7由于导入而无法在win7中工作 worker.py中的资源模块,这是Unix专用的软件包。
我希望有人能及时解决此问题。
答案 0 :(得分:2)
我收到此错误,并且在Windows上有spark 2.4.0,jdk 11和kafka 2.11。
我能够通过以下方式解决此问题:
1)cd spark_home \ python \ lib
例如cd C:\ myprograms \ spark-2.4.0-bin-hadoop2.7 \ python
2)解压缩pyspark.zip
3)编辑worker.py,注释掉“导入资源”,然后按照para进行保存。该段只是一个附加项,不是核心代码,因此可以将其注释掉。
4)删除旧的pyspark.zip并创建新的zip。
5)在jupyter笔记本电脑中重新启动内核。
在worker.py中的注释段落-
# set up memory limits
#memory_limit_mb = int(os.environ.get('PYSPARK_EXECUTOR_MEMORY_MB', "-1"))
#total_memory = resource.RLIMIT_AS
#try:
# if memory_limit_mb > 0:
#(soft_limit, hard_limit) = resource.getrlimit(total_memory)
#msg = "Current mem limits: {0} of max {1}\n".format(soft_limit, hard_limit)
#print(msg, file=sys.stderr)
# convert to bytes
#new_limit = memory_limit_mb * 1024 * 1024
#if soft_limit == resource.RLIM_INFINITY or new_limit < soft_limit:
# msg = "Setting mem limits to {0} of max {1}\n".format(new_limit, new_limit)
# print(msg, file=sys.stderr)
# resource.setrlimit(total_memory, (new_limit, new_limit))
#except (resource.error, OSError, ValueError) as e:
# # not all systems support resource limits, so warn instead of failing
# print("WARN: Failed to set memory limit: {0}\n".format(e), file=sys.stderr)
答案 1 :(得分:0)
Python与新发布的Spark 2.4.0版本存在一些兼容性问题。我也面临着类似的问题。如果您在系统中下载并配置Spark 2.3.2(更改环境变量),则问题将得到解决。