Python 比较两个包含浮点数的spark数据帧以进行单元测试

Python 比较两个包含浮点数的spark数据帧以进行单元测试,python,pyspark,apache-spark-sql,Python,Pyspark,Apache Spark Sql,我必须编写单元测试来比较代码的输出,为此我必须比较两个包含浮点数的pyspark数据帧 当我尝试将它们与assetEquals进行比较时,它没有指出相应的值不匹配,这主要是浮点比较的问题,我想在这里使用类似于np.isclose的东西,但我不确定如何使用,因为np.isclose不适用于我的情况。考虑下面的例子: df1 =[ { "customer_id": "1", "e0": 1.1,

我必须编写单元测试来比较代码的输出,为此我必须比较两个包含浮点数的pyspark数据帧

当我尝试将它们与assetEquals进行比较时,它没有指出相应的值不匹配,这主要是浮点比较的问题,我想在这里使用类似于np.isclose的东西,但我不确定如何使用,因为np.isclose不适用于我的情况。考虑下面的例子:

df1 =[
            {
                "customer_id": "1",
                "e0": 1.1,
                "e1": 2.2,
                "e2": 3.3,
                "e3": 0.0,
            }
        ]

df2 = [
            {
                "customer_id": "1",
                "e0": 1.100000000121,
                "e1": 2.1999999999012,
                "e2": 3.3,
                "e3": 0.0,
            }
       ]
assertEquals(df1, df2).

我希望这两个dfs在最大小数点后5位进行比较,但不确定如何进行比较。

您可以执行以下操作

df1_rounded  = df1.withColumn("e0", func.round(df_1.e0,5)).withColumn("e1", func.round(df_1.e,5))...
df2_rounded  = df2.withColumn("e0", func.round(df_2.e0,5)).withColumn("e1", func.round(df_2.e,5))...

然后比较它们。 例如,您可以通过检查df1和df2的交点大小是否与df1和df2的交点大小相同来进行比较


请注意,要使它们相等,只要检查是否相等,它们的顺序就必须相同。

您可以使用双精度类型对列进行四舍五入,并比较这些数据帧。您也可以使用内置函数
except\u all
except
用于scala)。它会满足你的需要。