如何验证依赖关系是否正确安装在spark slave节点上?

时间:2018-02-18 22:29:06

标签: python apache-spark pyspark

我正在尝试编写并运行一个测试,该测试表明AWS EMR集群中的所有从属服务器都具有pyspark软件包的必需依赖项(在其他地方的requirements.txt中定义)。

# tests/test_basic.py

import unittest
import pyspark

class SimpleTestCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        conf = pyspark.SparkConf().setAppName("testing")
        cls.sc = pyspark.SparkContext(conf=conf)

    @classmethod
    def tearDownClass(cls):
        cls.sc.stop()

    def test_use_scipy(self):
        test_input = [
            ' hello spark ',
            ' hello again spark spark'
        ]

        input_rdd = self.sc.parallelize(test_input)

        from operator import add

        def f(x):
            import scipy
            # an hypotetical operation that requires scipy
            return x.split()

        results = input_rdd.flatMap(f).map(lambda x: (x, 1)).reduceByKey(add).collect()

        self.assertEqual(set(results), {('hello', 2), ('spark', 3), ('again', 1)})

我正在执行主代码,如下所示:

PYSPARK_PYTHON=python3 PYSPARK_DRIVER_PYTHON=python3 python3 -m unittest

我不明白为什么这个测试通过:当我ssh奴隶时,pip-3.4 list不包含scipy。我希望这段代码失败,因为slave没有依赖运行。

我怀疑该作业没有被奴隶执行,可能是因为我没有使用spark-submit。这是因为当我从主节点卸载scipy时测试失败。

如何在假设的分段EMR集群上运行Python单元测试?

0 个答案:

没有答案