【发布时间】: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