【问题标题】:Compare two spark dataframes containing floating point numbers for Unittesting比较两个包含浮点数的火花数据帧以进行单元测试
【发布时间】:2020-08-20 19:22:29
【问题描述】:

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

当我尝试将它们与assetEquals进行比较时,它会说相应的值不匹配,这主要是浮点比较的问题,我想在这里使用np.isclose之类的东西,但我不确定如何,因为np.isclose 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 位进行比较,但不知道如何做到这一点。

【问题讨论】:

  • 您可以使用 Double 类型对列进行四舍五入并比较这些数据框。 spark.apache.org/docs/latest/api/python/… 你也可以使用内置函数 except_all (except 用于 scala)。它将满足您的需求。

标签: python pyspark apache-spark-sql


【解决方案1】:

你可以这样做

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 的交叉点大小来比较它们。

请注意,如果您只检查是否相等,它们需要具有相同的顺序。

【讨论】:

    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 2020-06-07
    • 2022-12-14
    • 2015-12-25
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多