#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