Apache spark 火花:哪里没有';我不能正常工作
我有两个数据集,我想创建一个联接数据集,所以我这样做了Apache spark 火花:哪里没有';我不能正常工作,apache-spark,apache-spark-sql,apache-spark-dataset,Apache Spark,Apache Spark Sql,Apache Spark Dataset,我有两个数据集,我想创建一个联接数据集,所以我这样做了 Dataset<Row> join = ds1.join(ds2, "id"); 这也可以工作,但当其中一个数据集为空时(在本例中,它将返回非空数据集),这不是预期的结果 因此,我的问题是,为什么。在这种情况下,不能正常工作,或者有没有另一种优化的解决方案,可以在不使用join()的情况下连接两个数据集连接两个RDD时,最关键的一点是在这两个RDD上使用分区器。如果第一个和第二个rdd具有相同的分区器,那么您的联接操作将具有最
Dataset<Row> join = ds1.join(ds2, "id");
这也可以工作,但当其中一个数据集为空时(在本例中,它将返回非空数据集),这不是预期的结果
因此,我的问题是,为什么
。在这种情况下,
不能正常工作,或者有没有另一种优化的解决方案,可以在不使用join()的情况下连接两个数据集
连接两个RDD时,最关键的一点是在这两个RDD上使用分区器。如果第一个和第二个rdd具有相同的分区器,那么您的联接操作将具有最好的性能。如果分区器发生变化,则第一个rdd的分区器将用于对第二个rdd进行分区
然后尝试只使用“轻键”,例如,使用字符串的编码或散列输出,而不是使用raw,并对两个RDD使用相同的分区器 当您想要连接两个RDD时,其中一个关键点就是在这两个RDD上使用的分区器。如果第一个和第二个rdd具有相同的分区器,那么您的联接操作将具有最好的性能。如果分区器发生变化,则第一个rdd的分区器将用于对第二个rdd进行分区
然后尝试只使用“轻键”,例如,使用字符串的编码或散列输出,而不是使用raw,并对两个RDD使用相同的分区器 连接和where条件是两个不同的东西。由于“解决”属性问题,where条件的代码将失败。where条件或筛选器条件特定于该数据帧。如果您在条件中提到第二个数据帧,它将不会像join一样迭代。请检查您的代码,如果您得到的是所有的结果Join和where condition是两个不同的东西。由于“解决”属性问题,where条件的代码将失败。where条件或筛选器条件特定于该数据帧。如果您在条件中提到第二个数据帧,它将不会像join一样迭代。如果你得到结果,请检查你的代码为什么你认为
在哪里
比加入
更能提高性能?@pault我从一位专家那里听说的,我还试着测量过滤器和加入的执行时间,过滤器似乎更快,可能是因为join使用笛卡尔积进行连接。为什么您认为其中
比连接
是一种性能增强?@pault我从一位专家那里听说过,我还尝试测量过滤器和连接的执行时间,而过滤器似乎更快,可能是因为join使用笛卡尔积进行连接。
Dataset<Row> join = ds1.where(col("id").equalTo(ds2.col("id"));