如何在 spark scala 中读取多个镶木地板文件

Mra*_*iya 1 scala list apache-spark parquet apache-spark-sql

下面是一些文件夹,它们可能会随着时间不断更新。他们有多个 .parquet 文件。如何在 Scala 的 Spark 数据框中读取它们?

  • “id=200393/日期=2019-03-25”
  • “id=200393/日期=2019-03-26”
  • “id=200393/日期=2019-03-27”
  • “id=200393/日期=2019-03-28”
  • “id=200393/date=2019-03-29”等等...

注意:- 可能有 100 个日期文件夹,我只需要选择特定的(比如 25,26 和 28)

有没有比下面更好的方法?

import org.apache.spark._
import org.apache.spark.SparkContext._
import org.apache.spark.sql._

val spark = SparkSession.builder.appName("ScalaCodeTest").master("yarn").getOrCreate()
val parquetFiles = List("id=200393/date=2019-03-25", "id=200393/date=2019-03-26", "id=200393/date=2019-03-28")

spark.read.format("parquet").load(parquetFiles: _*)
Run Code Online (Sandbox Code Playgroud)

上面的代码正在运行,但我想做类似下面的事情-

val parquetFiles = List()
parquetFiles(0) = "id=200393/date=2019-03-25"
parquetFiles(1) = "id=200393/date=2019-03-26"
parquetFiles(2) = "id=200393/date=2019-03-28"
spark.read.format("parquet").load(parquetFiles: _*)
Run Code Online (Sandbox Code Playgroud)

fir*_*sni 6

您可以通过这种方式读取它以读取目录 id=200393 中的所有文件夹:

val df  = spark.read.parquet("id=200393/*")
Run Code Online (Sandbox Code Playgroud)

如果您只想选择某些日期,例如仅 2019 年 9 月:

val df  = spark.read.parquet("id=200393/2019-09-*")
Run Code Online (Sandbox Code Playgroud)

如果你有一些特殊的日子,你可以在列表中列出天数

  val days = List("2019-09-02", "2019-09-03")
  val paths = days.map(day => "id=200393/" ++ day)
  val df = spark.read.parquet(paths:_*)
Run Code Online (Sandbox Code Playgroud)