Apache spark 如何在PySpark代码中调用我的单元测试函数?

Apache spark 如何在PySpark代码中调用我的单元测试函数?,apache-spark,pyspark,Apache Spark,Pyspark,我的PySpark代码中有一个单元测试模块,但不确定如何执行它 下面是我的代码,它只读取一个数据帧,其中只有两列Day和Amount。脚本保存为test.py,我只是在“Day”执行summatum。这是密码- import sys from pyspark.sql import SparkSession from pyspark.sql import Row from pyspark.sql.functions import * import pytest import unittest d

我的PySpark代码中有一个单元测试模块,但不确定如何执行它

下面是我的代码,它只读取一个数据帧,其中只有两列Day和Amount。脚本保存为test.py,我只是在“Day”执行summatum。这是密码-

import sys
from pyspark.sql import SparkSession
from pyspark.sql import Row
from pyspark.sql.functions import *
import pytest
import unittest

def main():
    spark=SparkSession.builder.appName("MyApp").config("spark.sql.shuffle.partitions","2").getOrCreate()
    #Start ETL
    data = extract_data(spark)
    data_transformed = transform_data(data)

    # log the success and terminate Spark application
    spark.stop()
    return None

# Extract Data
def extract_data(spark):
    df = (spark.read.option("inferSchema", "true").option("header","true").csv("myfile.txt"))
    return df

# Transform Data
def transform_data(df):
    df_transformed = (df.groupBy("Day").sum("Amount").withColumnRenamed("sum(Amount)","total_amt").select("Day","total_amt"))
    return df_transformed

pytestmark = pytest.mark.usefixtures("spark")
def my_test_func(self):
    test_input = [Row(Day=1, Amount =10),\
                  Row(Day=1, Amount =20)]
    input_df = spark.createDataFrame(test_input)
    result = transform_data(input_df).select("total_amt").collect()[0]
    expected_result = 30
    self.assertEqual(result, expected_result)
    print("test done")

if __name__ == '__main__':
    main()
我是PySpark的新手,有几个问题-

在上面的代码中,我的单元测试函数声明正确吗?若否,如何申报? 如何执行我的测试功能?我应该把它叫哪里?我想用spark submit运行这个脚本
您可以在不同的文件夹中编写spark单元测试。 比如说,

src
 +--jobs
      +-- job1

tests
 +--__jobs
      +---job1
下面是如何编写测试用例的

类TestJob1\ unittest.TestCase: def设置自我: 启动Spark,定义测试数据的配置和路径 self.spark=SparkSession.builder .appNameMyApp .configspark.sql.shuffle.partitions,2 .getOrCreate self.job1=Job1self.spark def自动拆卸: 停止火花 自行停止 def test_yourtest_code self: 测试输入=[RowDay=1,Amount=10, 行日=1,金额=20] input_df=spark.createDataFrametest_输入 结果=转换\u数据输入\u df。选择总计\u金额收集[0] 预期结果=30 self.assertEqualresult,预期结果 打印测试完成 您可以运行测试用例

python-m unittest jobs.TestJob1 python-m unittest jobs.TestJob1.test_yourtest_代码
谢谢,我应该如何调用它来执行呢?我使用pyCharm可以执行每个测试函数。您可以通过python运行命令行-m unittest test_module.TestClass python-m unittest test_module.TestClass.test_方法感谢Howie,我能够端到端地运行它。