在Scala中作为可选函数参数传递数据帧

在Scala中作为可选函数参数传递数据帧,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,有没有一种方法可以将数据帧作为Scala中的可选输入函数参数传递? 例: 虽然我在这里传递的是一个有效的数据帧,但它总是分配给一个空的数据帧,我如何避免这种情况?是的,您可以将数据帧作为参数传递给函数 假设您有一个dataframeas import sqlContext.implicits._ val df = Seq( (1, 2, 3), (1, 2, 3) ).toDF("col1", "col2", "col3") 那是 +----+----+----+ |col1|col

有没有一种方法可以将数据帧作为Scala中的可选输入函数参数传递? 例:


虽然我在这里传递的是一个有效的数据帧,但它总是分配给一个空的数据帧,我如何避免这种情况?

是的,您可以将
数据帧作为参数传递给函数

假设您有一个
dataframe
as

import sqlContext.implicits._

val df = Seq(
  (1, 2, 3),
  (1, 2, 3)
).toDF("col1", "col2", "col3")
那是

+----+----+----+
|col1|col2|col3|
+----+----+----+
|1   |2   |3   |
|1   |2   |3   |
+----+----+----+
您可以将其传递给如下函数

import org.apache.spark.sql.DataFrame
def test(sampleDF: DataFrame): DataFrame = {
  sampleDF.select("col1", "col2") //doing some operation in dataframe
}

val testdf = test(df)
testdf

+----+----+
|col1|col2|
+----+----+
|1   |2   |
|1   |2   |
+----+----+
已编辑

正如eliasah指出的,@Garipaso需要可选参数。这可以通过将函数定义为

def test(sampleDF: DataFrame = sqlContext.emptyDataFrame): DataFrame = {
  if(sampleDF.count() > 0) sampleDF.select("col1", "col2") //doing some operation in dataframe
  else sqlContext.emptyDataFrame  
}
如果我们将有效的数据帧作为

test(df).show(false)
它将给出如下输出:

+----+----+
|col1|col2|
+----+----+
|1   |2   |
|1   |2   |
+----+----+
但如果我们不把论点当作

test().show(false)
我们将得到空的数据帧作为

++
||
++
++

我希望答案是有用的

这甚至不应该编译。(撇开函数主体不谈)您刚刚为函数设置了一个默认参数,如果您将一个有效的数据帧传递给
test
,它应该可以工作。为什么在这里使用
df.test
?什么是
df
?Hi@RameshMaharjan,关于性能和默认行为:它是副本还是参考?(就像“数组作为参数”的经典问题一样,当处理引用或处理所有数据的成本很低或很高时,clair永远不会出现)
++
||
++
++