我有两个Dataframe,每个Dataframe有230列,我想比较一个键列上的两个Dataframe,如果使用spark的java8中的列值有任何差异的话,就从这两个Dataframe中获取列名称和值。
id Col_1 Col_2 Col_3 Col_4 Col_5
1 A B C D E
2 X Y Z P Q
id Col_1 Col_2 Col_3 Col_4 Col_5
1 A B6 C D E
2 X Y Z8 P Q3
输出
id Col_1 Col_2 Col_3 Col_4 Col_5
1 null [B,B6] null null null
2 null null [Z,Z8] null [Q,Q3]
使用spark和java8
Df1.except(DF2);
StructType one = DF1.schema();
JavaPairRDD<String, Row> pair1 = DF1.toJavaRDD()
.mapToPair(new PairFunction<Row, String, Row>() {
public Tuple2<String, Row> call(Row row) {
return new Tuple2<String, Row>(row.getString(0), row);
}
});
JavaPairRDD<String, Row> pair2 = DF2.toJavaRDD()
.mapToPair(new PairFunction<Row, String, Row>() {
public Tuple2<String, Row> call(Row row) {
return new Tuple2<String, Row>(row.getString(0), row);
}
});
JavaPairRDD<String, Row> subs = pair1.subtractByKey(pair2);
JavaRDD<Row> rdd = subs.values();
Dataset<Row> diff = spark.createDataFrame(rdd, one);
diff.show();
请帮忙。
2条答案
按热度按时间hfwmuf9z1#
请找到下面的解决方案,我试图通过保持dataframes为dataframes来解决这个问题,您可以找到代码解释的内联注解。实际的解决方案从下面的第//行开始
kxkpmulp2#
我试图用Dataframe方法解决这个问题-
请参考此处的完整代码-要点