Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如果从磁盘或其读取的数据';在记忆中_Apache Spark_Spark Dataframe - Fatal编程技术网

Apache spark 如果从磁盘或其读取的数据';在记忆中

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

当我尝试使用JavaRDD减法来比较2个数据帧时,我遇到了一个奇怪的行为

这就是我正在做的: 我试图通过将2个数据帧(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());
…断言失败

如果我将数据写入磁盘并将其读回另一个数据帧,那么就可以了

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

你能添加一个示例吗?添加了示例代码