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

Posted

技术标签:

【中文标题】Spark 2.2.0 - 加载特定的文件列表【英文标题】:Spark 2.2.0 - Load a specific list of files 【发布时间】:2018-05-01 21:18:22 【问题描述】:

我想将特定的文件列表加载到 Spark 中。我制作了一个过滤文件列表的UDF,因此我获得了一个Seq<String>,其中包含我要加载的文件。我正在尝试使用public Dataset<Row> csv(scala.collection.Seq<String> paths)link to API,但由于某些原因,它告诉我“使用替代方法重载方法值 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])"

我在这里错过了什么?

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】:

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

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

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

【讨论】:

以上是关于Spark 2.2.0 - 加载特定的文件列表的主要内容,如果未能解决你的问题,请参考以下文章

从文件列表而不是 Spark 中的 PATH 读取是不是有效?

hive-------ls: 无法访问/opt/apps/spark-2.2.0/lib/spark-assembly-*.jar: 没有那个文件或目录

停止特定文件夹的流星实时重新加载

Spark配置

带有 spark.read.text 的 Spark 2.0 索引 3 处的预期方案特定部分:s3:错误

bigdata learning unit two--Spark environment setting