Я хочу загрузить в Spark определенный список файлов. Я создал UDF, который фильтрует список файлов, поэтому я получил Seq<String>
с файлами, которые хочу загрузить. Я пытаюсь использовать public Dataset<Row> csv(scala.collection.Seq<String> paths)
ссылка на API, но по некоторым причинам он сообщает мне «перегруженное значение метода csv с альтернативами: (paths: String *) org.apache.spark.sql.DataFrame (csvDataset: org.apache.spark.sql. Набор данных [String]) org.apache.spark.sql.DataFrame (path: String) org.apache.spark.sql.DataFrame не может быть применен к (Seq [String]) »
Что мне здесь не хватает?
package main.scala.task
import org.apache.spark.sql.SparkSession
object Test {
def date_filter: (java.io.File, Int) => Boolean = (file: java.io.File, threshold: Int) => {
val pat1 = "(\\d+)".r // Pattern to capture timestamp
val matcher1 = pat1.findFirstMatchIn(file.getName) // Capture timestamp
matcher1 match {
case Some(matched1) => {if (matched1.group(1).toInt > threshold) {true} else {false}}
case None => false
}
}
def main(args: Array[String]) {
val spark = SparkSession.builder().getOrCreate()
import spark.implicits._
val path = "/my_folder/Test"
val now: Int = 1486022490
var files = new java.io.File(path).listFiles.filter(p => date_filter(p,now)).map(_.getName).toSeq
val df = spark.read.csv(files)
}
}
Ошибка сообщает вам, что вам нужно использовать varargs вместо передачи последовательности строк.
val files: Seq[String] = Seq("/path/to/file1.txt", "/path/to/file2.txt")
val df = spark.read.csv(files:_*)
Кроме того, вы связались с документами Java вместо Документы Scala, что может объяснить вашу путаницу.