Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 为什么向量的Spark数据帧上的MergeSort连接后的不同计数会给出不确定的结果_Apache Spark - Fatal编程技术网

Apache spark 为什么向量的Spark数据帧上的MergeSort连接后的不同计数会给出不确定的结果

Apache spark 为什么向量的Spark数据帧上的MergeSort连接后的不同计数会给出不确定的结果,apache-spark,Apache Spark,使用包含ml向量的列进行spark内部SortMerge联接时,在较大的数据集上似乎会给出不确定和不准确的结果 我使用了Spark v2.4.3的BucketRandomLSH投影方法,发现它对大数据集给出了不同数量的结果 此问题仅在执行SortMerge联接时出现;广播联接每次都给出相同的结果 我追踪到了LSH哈希键上的连接问题。下面是一个可复制的示例 import org.apache.spark.sql.functions_ 导入org.apache.spark.ml.linalg.Vec

使用包含ml向量的列进行spark内部SortMerge联接时,在较大的数据集上似乎会给出不确定和不准确的结果

我使用了Spark v2.4.3的BucketRandomLSH投影方法,发现它对大数据集给出了不同数量的结果

此问题仅在执行SortMerge联接时出现;广播联接每次都给出相同的结果

我追踪到了LSH哈希键上的连接问题。下面是一个可复制的示例

import org.apache.spark.sql.functions_
导入org.apache.spark.ml.linalg.Vectors
导入scala.util.Random
spark.conf.set(“spark.sql.autoBroadcastJoinThreshold”,-1)
//创建包含长度为1的ml向量数组(长度为2)的大型数据帧。
val df=顺序填充(30000)(
(java.util.UUID.randomUUID.toString,
序号(
向量。稠密(随机。下一个(10)。双重),
向量。稠密(随机。下一个(10)。双)
)
)托夫先生
//确保它是缓存
df.cache.count()
//位置分解向量列
val dfexplode=df.select(列(“*”),posexplode(列(“_2”))
//现在在分解的“col”和“pos”字段上进行自联接
dfExploded.join(dfExploded,Seq(“pos”,“col”)).drop(“pos”,“col”).distinct.count
每次都有不同的结果

scala>dfExploded.join(dfExploded,Seq("pos","col")).drop("pos","col").distinct.count
res139: Long = 139663581                                                        

scala>dfExploded.join(dfExploded,Seq("pos","col")).drop("pos","col").distinct.count
res140: Long = 156349630  

有趣的是,如果您使用Scalas
Seq[Double]
而不是Sparks
Vector
,那么它是确定性的。我认为问题可能是你的连接条件,在这里你比较两个稠密向量项(它们是浮点),你是对的!谢谢我想问题是为什么不能成功地比较两个向量?LSH算法被这一点打破(参见此)