Dataframe 如果未选择任何内容,是否在连接后推送dropDuplicates和select操作?

Dataframe 如果未选择任何内容,是否在连接后推送dropDuplicates和select操作?,dataframe,apache-spark,join,apache-spark-sql,Dataframe,Apache Spark,Join,Apache Spark Sql,给定 情景1 val a = List(1,2,3).toDF("a") val b = List(1,2,3).toDF("b") 情景2 a.filter(col("a").isNull).dropDuplicates().crossJoin(b).show() // display empty data frame as expected 在场景2中,当我从a中选择no列,然后进行交叉连接时,我希望数据帧为空 情景3 val c

给定

情景1

     val a = List(1,2,3).toDF("a")
     val b = List(1,2,3).toDF("b")
情景2

      a.filter(col("a").isNull).dropDuplicates().crossJoin(b).show()
      // display empty data frame as expected
在场景2中,当我从
a
中选择no列,然后进行交叉连接时,我希望数据帧为空

情景3

      val c = List().map(a => col(a))
      a.select(c:_*).crossJoin(b).show()
      // displays
      +---+
      |  b|
      +---+
      |  1|
      |  1|
      |  1|
      |  2|
      |  2|
      |  2|
      |  3|
      |  3|
      |  3|
      +---+
在场景3中,我再次期望有一个空的数据帧。但是除了结果数据帧不是空的之外,
dropDuplicates
似乎发生在场景2中的结果之后


我错过了一些琐碎的事情。选择、加入和删除重复项的顺序是什么?选择与空数据框没有什么不同吗?

是因为在执行
a.select(c:*)
时有3个空元素,并且由于交叉联接是笛卡尔联接,所以会给出此结果吗
a.select(c:*).count()
return 3这是因为执行a.select(c:*)时有3个空元素,并且由于交叉联接是笛卡尔联接,所以会给出此结果吗
a.select(c:*).count()
return 3
       val c = List().map(a => col(a))
       a.select(c:_*).dropDuplicates().crossJoin(b).show()
       // displays
       +---+
       |  b|
       +---+
       |  1|
       |  2|
       |  3|
       +---+