由于ImportError,Spark Release 2.4.0无法在win7上运行:没有名为“ resource”的模块

时间:2018-11-19 12:55:52

标签: python apache-spark pyspark

我尝试在我的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())

我收到此错误:

error1

我打开worker.py文件检查代码。

我发现在2.4.0版中,代码是:

worker.py v2.4.0

但是,在版本2.3.2中,代码为:

worker.py v2.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专用的软件包。

我希望有人能及时解决此问题。

2 个答案:

答案 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(更改环境变量),则问题将得到解决。