我正在尝试编写并运行一个测试,该测试表明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单元测试?