【发布时间】:2016-11-11 08:52:20
【问题描述】:
当我尝试使用 JavaRDD 减法比较 2 个 DataFrame 时,我遇到了一个奇怪的行为。
这就是我正在做的事情: 我尝试比较 2 DataFrame (A,B) 是否相等,方法是将它们转换为 JavaRDD,然后从 B 中减去 A,从 A 中减去 B。如果它们相等(包含相同的数据),那么两个结果都应该是空的 JavaRDD。
我没有得到空结果:
DataFrame A = someFunctionRespondWithDF(param);
DataFrame B = sqlContext.read().json("src/test/resources/expected/exp.json");
Assert.assertTrue(B.toJavaRDD().subtract(A.toJavaRDD()).isEmpty());
Assert.assertTrue(A.toJavaRDD().subtract(B.toJavaRDD()).isEmpty());
...断言失败
如果我将数据写入磁盘并将其读回另一个 Dataframe,那就没问题了。
A.write().json("target/result.json");
DataFrame AA = sqlContext.read().json("target/result.json");
Assert.assertTrue(B.toJavaRDD().subtract(AA.toJavaRDD()).isEmpty());
Assert.assertTrue(AA.toJavaRDD().subtract(B.toJavaRDD()).isEmpty());
...断言为真
我还尝试通过在 DataFrame (based on this answer) 上调用 count()、cache() 或 persist() 函数来强制执行评估,但没有成功。
DataFrame AAA = A.cache();
Assert.assertTrue(B.toJavaRDD().subtract(AAA.toJavaRDD()).isEmpty();
Assert.assertTrue(AAA.toJavaRDD().subtract(B.toJavaRDD()).isEmpty();
有没有人有同样的经历?我在这里想念什么?
Spark 版本:1.6.1
【问题讨论】:
-
你能举个例子吗?
-
添加示例代码
标签: apache-spark spark-dataframe