Pyspark数据帧操作的单元测试用例

时间:2016-04-14 10:11:36

标签: python unit-testing spark-dataframe pyspark-sql

我在python中用sql上下文编写了一些代码,即pyspark,通过将它们转换为pyspark数据帧来执行csv上的一些操作(df操作,如预处理,重命名列名,创建新列并将它们附加到相同的数据帧和等等)。我想为它编写单元测试用例。我不知道在数据帧上编写单元测试用例。任何人都可以帮我解决如何在pyspark中的数据框上编写单元测试用例的问题吗?或者给我一些关于数据帧的测试用例的来源?

1 个答案:

答案 0 :(得分:2)

数据框与pyspark土地上的任何其他内容都没有区别。您可以先查看Python section of spark-testing-base。有几个有趣的项目有数据框测试,所以你可以从偷看它们是如何做到的:Sparkling Pandas是一个,这是另一个example。还有find-spark有助于找到您的spark可执行文件上下文。但基本思路是在开始测试之前正确设置路径:

def add_pyspark_path():
    """
    Add PySpark to the PYTHONPATH
    Thanks go to this project: https://github.com/holdenk/sparklingpandas
    """
    import sys
    import os
    try:
        sys.path.append(os.path.join(os.environ['SPARK_HOME'], "python"))
        sys.path.append(os.path.join(os.environ['SPARK_HOME'],
            "python","lib","py4j-0.9-src.zip"))
    except KeyError:
        print "SPARK_HOME not set"
        sys.exit(1)

add_pyspark_path() # Now we can import pyspark

通常你会有一个基础测试用例类:

import logging

from pyspark import SparkContext
from pyspark import SparkConf
from pyspark.sql import SQLContext, HiveContext

def quiet_py4j():
    """ turn down spark logging for the test context """
    logger = logging.getLogger('py4j')
    logger.setLevel(logging.WARN)

class SparkTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        quiet_py4j()

        # Setup a new spark context for each test
        conf = SparkConf()
        conf.set("spark.executor.memory","1g")
        conf.set("spark.cores.max", "1")
        #conf.set("spark.master", "spark://192.168.1.2:7077")
        conf.set("spark.app.name", "nosetest")
        cls.sc = SparkContext(conf=conf)
        cls.sqlContext = HiveContext(cls.sc)

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