簡體   English   中英

Spark SQL 中 Spark Dataframe 的 dropDuplicates 等效於什么?

[英]What is the equivalent of Spark Dataframe's dropDuplicates in Spark SQL?

我在 Spark (3.0/3.1) 中有一些這樣寫的代碼:

foo.join(bar, Seq("col1","col2","col3"),"inner").dropDuplicates("col1","col2")

其中foobar是兩個通用數據框。

它如何轉換為 Spark SQL? 我找不到與dropDuplicates等效的定義:

select distinct(col1, col2), *....

似乎是不同的東西。 任何想法?

您可以使用排名 function - row_number()。

val spark = SparkSession.builder().master("local[*]").getOrCreate()
spark.sparkContext.setLogLevel("ERROR")
import spark.implicits._

val df = List((1, 2, 3), (1, 2, 4), (1, 4, 6)).toDF("col1", "col2", "col3")

df.dropDuplicates("col1", "col2").show()
/*
+----+----+----+
|col1|col2|col3|
+----+----+----+
|   1|   2|   3|
|   1|   4|   6|
+----+----+----+*/

df.createOrReplaceTempView("table")
spark.sql(
    """
      |select col1, col2, col3 from (
      |   select *, row_number() over (partition by col1, col2 order by col1, col2) as rn from table)
      |   where rn = 1
      |""".stripMargin).show()
/*
+----+----+----+
|col1|col2|col3|
+----+----+----+
|   1|   2|   3|
|   1|   4|   6|
+----+----+----+*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM