【问题标题】:a function that returns multiple values in Scala [duplicate]在Scala中返回多个值的函数[重复]
【发布时间】:2020-03-20 05:58:06
【问题描述】:

我是 Spark 和 Scala 的新开发人员,我想做一件简单的事情(我认为..):

  • 我有 3 个 int 值
  • 我想定义一个返回 SQL 请求结果的函数(作为包含 3 列的 DF)
  • 我想将这 3 列中每一列的内容存储在我的 3 个初始变量中。

所以,我的代码如下所示:

var a
var b 
var c

def myfunction() : (Int, Int, Int) = {
  val tmp = spark.sql(""" select col1, col2, col3 from table
  LIMIT 1
  """)

  return (tmp.collect(0)(0), tmp.collect(0)(1), tmp.collect(0)(2))

}

所以,如果这样调用我的函数的想法:

a, b, c = myfunction()

我尝试了很多配置,但每次都会遇到很多不同的错误,所以我很困惑。

【问题讨论】:

  • 另请注意,多次调用collect 非常昂贵,因为所有内容都必须重新计算。我只会 spark.sql(...).as[(Int, Int, Int)].head 并删除不必要的 val temp 以及不安全的 return

标签: scala apache-spark


【解决方案1】:

你可以只使用解构绑定。由于您的方法返回元组,您可以使用模式匹配对其进行解包:

val (a, b, c) = myfunction()

abc 将包含元组的连续元素。

【讨论】:

    猜你喜欢
    • 2014-09-12
    • 2011-04-19
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2016-09-26
    • 2015-07-07
    相关资源
    最近更新 更多