Python 比较两个包含浮点数的spark数据帧以进行单元测试
我必须编写单元测试来比较代码的输出,为此我必须比较两个包含浮点数的pyspark数据帧 当我尝试将它们与assetEquals进行比较时,它没有指出相应的值不匹配,这主要是浮点比较的问题,我想在这里使用类似于np.isclose的东西,但我不确定如何使用,因为np.isclose不适用于我的情况。考虑下面的例子: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,
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)。它会满足你的需要。