Apache spark 如果从磁盘或其读取的数据';在记忆中
当我尝试使用JavaRDD减法来比较2个数据帧时,我遇到了一个奇怪的行为 这就是我正在做的: 我试图通过将2个数据帧(A,B)转换为JavaRDD来比较它们是否相等,然后从B中减去A,从A中减去B。如果它们相等(包含相同的数据),那么两个结果都应该是空的JavaRDD 我没有得到空的结果:Apache spark 如果从磁盘或其读取的数据';在记忆中,apache-spark,spark-dataframe,Apache Spark,Spark Dataframe,当我尝试使用JavaRDD减法来比较2个数据帧时,我遇到了一个奇怪的行为 这就是我正在做的: 我试图通过将2个数据帧(A,B)转换为JavaRDD来比较它们是否相等,然后从B中减去A,从A中减去B。如果它们相等(包含相同的数据),那么两个结果都应该是空的JavaRDD 我没有得到空的结果: DataFrame A = someFunctionRespondWithDF(param); DataFrame B = sqlContext.read().json("src/test/resources
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());
…断言失败
如果我将数据写入磁盘并将其读回另一个数据帧,那么就可以了
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()上的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好的,我可以回答我自己的问题: 断言失败的原因是,当我从json读取数据帧时,类型不同。假设我的原始数据帧中有一个整数,从json(!无模式文件)读回后,它将是一个很长的时间。
解决方案->使用描述模式的格式,如avro 你能添加一个示例吗?添加了示例代码