Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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_Apache Spark Sql_Apache Spark Dataset - Fatal编程技术网

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"));