如何将参数传递给scala中的方法

Posted

技术标签:

【中文标题】如何将参数传递给scala中的方法【英文标题】:How to pass argument to method in scala 【发布时间】:2019-03-08 15:20:16 【问题描述】:

我正在尝试将第四个 (targetFileCount) 参数传递给如下方法

val config = ConfigFactory.load("market_opt_partition.properties")
val targetFileCount = (config.getInt(Code))
writeArray1.par.foreach 
  case (df, path, tog, targetFileCount) => Utility.write(df, path, tog, targetFileCount)

object Utility 
    def write(sourceDf: DataFrame, path: String, toggle: String, targetFileCount:Int): Unit

但我面临以下错误,

Error:(368, 12) constructor cannot be instantiated to expected type;
found   : (T1, T2, T3, T4)
required: (org.apache.spark.sql.DataFrame, String, String)
      case (df, path, tog, targetFileCount) => Utility.write(df, path, tog, targetFileCount)

Error:(368, 67) not found: value df
      case (df, path, tog, targetFileCount) => Utility.write(df, path, tog, targetFileCount)

请告诉我如何纠正。

【问题讨论】:

有人能解释为什么这么多 scala 问题如此容易被否决吗?似乎几乎每个 scala 问题都被否决了(也没有评论) 【参考方案1】:

writeArray1 包含 org.apache.spark.sql.DataFrame, String, String 的元组 3 所以 4 个参数的模式匹配不起作用。

另一个例子:

val l = List(5)
l.map  case (a, b) => a.toString 

也会产生同样的错误:

 error: constructor cannot be instantiated to expected type;
 found   : (T1, T2)
 required: Int

【讨论】:

我猜第四个参数, int 不是实际传递的内容的一部分?所以这就是不匹配的原因? 谢谢@blackwizard。请建议如何通过第四次争论 @GamingFelix 是的,没错。想知道如何解决。 我认为你需要做的是改变模式匹配,所以它可以匹配3个参数。您仍然可以在匹配之后在 write 函数中发送第四个参数。我希望你明白我的意思 这样,case (x, y, z) => Utility.write(x,y,z,fourthargument)【参考方案2】:

如上所述,writeArray1.par 包含 3 个 org.apache.spark.sql.DataFrame、String、String 的元组,因此 4 个参数的模式匹配不起作用。

请如下使用。

val config = ConfigFactory.load("market_opt_partition.properties")
val targetFileCount = (config.getInt(Code))
writeArray1.par.foreach 
  case (df, path, tog) => Utility.write(df, path, tog, targetFileCount)

object Utility 
    def write(sourceDf: DataFrame, path: String, toggle: String, targetFileCount:Int): Unit

【讨论】:

以上是关于如何将参数传递给scala中的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何将可选参数传递给 C++ 中的方法?

如何将复杂的 Java 类对象作为参数传递给 Spark 中的 Scala UDF?

如何将参数传递给 Thread 中的 ThreadStart 方法?

如何使用 SwiftUI 将参数传递给 Button 的操作

如何将参数传递给yii2中的afterSave()方法?

将 UDF 方法作为参数传递给 KSQL 中的其他 UDF