Как передать аргумент методу в scala

#scala #apache-spark #dataframe #apache-spark-sql

#scala #apache-spark #фрейм данных #apache-spark-sql

Вопрос:

Я пытаюсь передать четвертый аргумент (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)
  

Пожалуйста, дайте мне знать, как исправить то же самое.

Комментарии:

1. может кто-нибудь объяснить, почему так много вопросов scala так легко отклоняются? Кажется, что почти каждый вопрос scala отклоняется (тоже без комментариев)

Ответ №1:

writeArray1 содержит кортеж 3 из org.apache.spark.sql.DataFrame, String, String , поэтому сопоставление с шаблоном по 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
  

Комментарии:

1. Я предполагаю, что четвертый аргумент, int, не является частью того, что на самом деле передается? Так вот почему он не соответствует?

2. Спасибо @blackwizard. Пожалуйста, предложите, как передать четвертый аргумент

3. @GamingFelix Да, это правильно. Хотите знать, как решить то же самое.

4. Я думаю, что вам нужно сделать, это изменить соответствие шаблону, чтобы он мог соответствовать 3 аргументам. Вы все еще можете отправить четвертый аргумент после сопоставления в функции write. Я надеюсь, вы понимаете, что я имею в виду

5. итак, вот так, case (x, y, z) => Utility.write(x,y, z, четвертый аргумент)

Ответ №2:

Как сказано выше, writeArray1.par содержит кортеж из 3 org.apache.spark.sql.DataFrame, 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