scala - 为什么在显示运算符之后无法加入?

标签 scala apache-spark join apache-spark-sql

以下代码工作正常,直到我在 agg 之后添加 show 为止。为什么show 不可能?

 val tempTableB = tableB.groupBy("idB")
  .agg(first("numB").as("numB")) //when I add a .show here, it doesn't work

 tableA.join(tempTableB, $"idA" === $"idB", "inner")
 .drop("idA", "numA").show

错误提示:

error: overloaded method value join with alternatives:
  (right: org.apache.spark.sql.Dataset[_],joinExprs: org.apache.spark.sql.Column,joinType: String)org.apache.spark.sql.DataFrame <and>
  (right: org.apache.spark.sql.Dataset[_],usingColumns: Seq[String],joinType: String)org.apache.spark.sql.DataFrame
 cannot be applied to (Unit, org.apache.spark.sql.Column, String)
              tableA.join(tempTableB, $"idA" === $"idB", "inner")
                     ^

为什么会这样?

最佳答案

.show() 是一个带有副作用的函数,我们在 Scala 中称之为副作用。它打印到 stdout 并返回 Unit(),就像 println

示例:

val a  = Array(1,2,3).foreach(println)
a: Unit = ()

在 scala 中,你可以假设一切都是函数并且会返回一些东西。在您的情况下,将返回 Unit(),这就是存储在 tempTableB 中的内容。

关于scala - 为什么在显示运算符之后无法加入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45322005/

相关文章:

scala - 如何简洁地表达函数迭代?

scala - 断言 RDD 未排序

mysql - SQL 提取用户组 ID,仅包含指定的用户 ID

linux - 将多个文件合并为一个文件,包括 shell 中不匹配的行

scala - Play 框架解析查询参数中的分号

scala - 为什么 sbt 一直告诉我添加 -deprecation 到 scalacOptions ?

python - Scala 相当于 Python 生成器?

scala - 从Spark查询Elastic搜索返回空Map的值

performance - Spark : Explicit caching can interfere with Catalyst optimizer's ability to optimize some queries?

mysql - 简单 SQL 连接的问题