断言函数来测试像dataframes这样的spark集合。

spark-test的Python项目详细描述


一个断言函数集合,用于测试像dataframes这样的spark集合

-

在开发spark应用程序时,最终可以编写在spark数据帧上应用转换的方法。为了测试结果,您可以创建pandasdataframes并使用pandas提供的测试函数,因为pyspark不提供任何帮助测试的函数。

spark-test提供类似于pandas的测试函数,但面向spark集合。

假设您有一个函数可以在spark数据帧上应用一些转换(这个示例的完整代码可以在test s/test-example.py:

def transform(df):
    """
    Fill nulls with 0, sum 10 to Age column and only return distinct rows
    """

    df = df.na.fill(0)
    df = df.withColumn('Age', df['Age'] + 10)
    df = df.distinct()

    return df

然后,我们可以编写一个测试用例,其中包含所需的任意多个测试输入,并使用assert_dataframe_equal

from spark_test.testing import assert_dataframe_equal


def test_transform(spark, transform):

    input_df = spark.createDataFrame(
        [['Tom', 25], ['Tom', 25], ['Charlie', 24], ['Dan', None]],
        schema=['Name', 'Age']
    )

    expected = spark.createDataFrame(
        [['Tom', 35], ['Charlie', 34], ['Dan', 0]],
        schema=['Name', 'Age']
    )
    result = transform(input_df)

    assert_frame_equal(expected, result)

当然,测试失败时更有趣,所以让我们在transform函数中引入一个bug:

def bugged_transform(df):
    """
    Fill nulls with 0, sum 10 to Age column and only return distinct rows
    """

    df = df.na.fill(1)  # Whoops! Should be 0!
    df = df.withColumn('Age', df['Age'] + 10)
    df = df.distinct()

    return df

使用pytest.mark.parametize将这两个函数传递给我们的测试,会产生以下输出,其中包含一条关于失败的消息:

$ pytest tests/example.py
============================= test session starts =============================
platform linux -- Python 3.7.3, pytest-5.0.0, py-1.8.0, pluggy-0.12.0
rootdir: /home/tfarias/repos/spark-test
collected 2 items

tests/example.py .F                                                [100%]

================================== FAILURES ===================================
_______________________ test_transform[bugged_transform] ________________________

            assert left_d[key] == right_d[key], msg.format(
>               field=key, l_value=left_d[key], r_value=right_d[key]
            )
E           AssertionError: Values for Age do not match:
E           Left=10
E           Right=11

许可证

根据麻省理工学院的许可证发行。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java匹配正则表达式并提取组oneliner   同步嵌套映射和集合(Java)   使用ApachePOI将结果集从Java数据库导出到Excel   java创建一个方法,其中变量是jTable   java如何创建带有嵌套循环的半菱形形状?   C/C++和Java的调试器   Java API中的生成器模式示例?   java代码分支应该应用什么样的单元测试组合?   如何求算法的时间复杂度   java如果我想代理所有服务调用,以便在不显式调用记录器的情况下正确记录它们,我有什么选择?   RabbitMQ java客户端到多个队列的连接   出现第一个空格之前的java掩码字符串   java使用子类对象修改其超类对象中的受保护属性   java如何使用PagerSlidingTabStrip删除选项卡?   java在禁用按钮后刷新整数值