Spark 2.2.0 - 加载特定的文件列表

时间:2018-05-01 21:18:22

标签: scala apache-spark

我想将特定的文件列表加载到Spark中。我制作了一个过滤文件列表的UDF,所以我获得了一个Seq<String>来加载我要加载的文件。我尝试使用public Dataset<Row> csv(scala.collection.Seq<String> paths) link to API但是由于某些原因,它告诉我&#34;重载方法值csv与替代方法:(paths:String *)org.apache.spark.sql .DataFrame(csvDataset:org.apache.spark.sql.Dataset [String])org.apache.spark.sql.DataFrame(path:String)org.apache.spark.sql.DataFrame无法应用于(Seq [String] )&#34;

我在这里缺少什么?

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)

  }
}

1 个答案:

答案 0 :(得分:1)

错误告诉您需要使用varargs而不是传递一系列字符串。

val files: Seq[String] = Seq("/path/to/file1.txt", "/path/to/file2.txt")
val df = spark.read.csv(files:_*)

此外,您链接到Java文档而不是Scala docs,这可能会解释您的困惑。