断言函数来测试像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如何在MySql中创建类似序列的东西   intellij idea Java错误在命令窗口中运行简单程序时发生JNI错误   使用JavaBrains中的代码时出现java异常   java如何调用父重写方法   java JavaFx:使用加法/乘法双向绑定数字/   java如何使用文件以特定的方式打印目录树。newDirectoryStream和递归?   java图形未显示在JFrame上   扫描仪上的java NoTouchElementException。下一行()   java中jenkins中显示的api访问Fitnesse结果   JavaGMF以编程方式创建连接,而不使用命令   java什么从unity3d发送json   在Java中模仿PHP http_build_查询函数   安卓中的java转储内存   在java中解析如何从字符串中读取第二行   java OutputLength Rijndael实现中的异常   Java右移输出负值   java多选项,选择最佳?   JavaSwingGUI在Java1.8更新后不刷新或冻结   java使用jpa查询将datetime字段与日期进行比较