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如何检测重复项?可以修改吗?_Apache Spark_Pyspark_Apache Spark Sql_Pyspark Sql - Fatal编程技术网

Apache spark Apache Spark如何检测重复项?可以修改吗?

Apache spark Apache Spark如何检测重复项?可以修改吗?,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,ApacheSpark如何检测重复行 我这样问的原因是我想有一种不同的行为: 在用于重复检测的列集合中,对于其中一些列(类型为double),我希望重复检测基于两个值之间的差值低于某个阈值(由我指定) 我想这可以通过使用crossJoin()和适当的where语句来实现,但是,我希望有一个更优雅的解决方案 谢谢 它使用HashArggregate: scala> df.distinct.explain == Physical Plan == *HashAggregate(keys=[x#1

ApacheSpark如何检测重复行

我这样问的原因是我想有一种不同的行为:

在用于重复检测的列集合中,对于其中一些列(类型为
double
),我希望重复检测基于两个值之间的差值低于某个阈值(由我指定)

我想这可以通过使用
crossJoin()
和适当的
where
语句来实现,但是,我希望有一个更优雅的解决方案


谢谢

它使用
HashArggregate

scala> df.distinct.explain
== Physical Plan ==
*HashAggregate(keys=[x#12], functions=[])
+- Exchange hashpartitioning(x#12, 200)
   +- *HashAggregate(keys=[x#12], functions=[])
      +- LocalTableScan [x#12]
我希望有一个更优雅的解决方案

您可以尝试LSH运算符提供的近似联接:

但它不太可能使用单一功能

您可以对窗口函数使用类似会话的方法,但这只有在您可以将数据划分为分区时才有用。若你们对近似很满意,你们可以使用固定的大小范围,然后应用我在中描述的方法

另一个近似值可以通过
排序
映射分区
实现

df.sortBy("someColumn").rdd.mapPartitions(drop_duplicates).toDF()
其中,
dropDuplicates
的实现类似于:

def drop_duplicates(xs):
    prev = None
    for x in xs:
        if prev is None or abs(x - prev) > threshold:
            yield x
        prev = x   

只要稍加努力,就可以使分区边界保持一致。

感谢您提供的好的、有趣的提示。问题是:我试图得到一个精确的解决方案。对于近似解,我可以根据阈值进行乘法/除法/取整,然后使用它。顺便说一句:我确实有一个
groupID
列,可以用于
Window.partitionBy('groupID')