我尝试在我的电脑上安装 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 特定的包。
我希望有人能在 spark 中解决这个问题。
请您参考如下方法:
我遇到了这个错误,我在 Windows 上安装了 spark 2.4.0、jdk 11 和 kafka 2.11。 我能够通过这样做来解决这个问题 - 1) 光盘 spark_home\python\lib
例如。 cd C:\myprograms\spark-2.4.0-bin-hadoop2.7\python
2) 解压pyspark.zip
3) 编辑 worker.py ,注释掉 'import resource' 和下面的 para 并保存文件。这一段只是附加的,不是核心代码,注释掉就好了。
4) 删除旧的 pyspark.zip 并创建新的 zip。
5) 在jupyter notebook中重启内核。
commented para in 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)
