【问题标题】:How can I read multiple parquet files in spark scala如何在 spark scala 中读取多个镶木地板文件
【发布时间】:2020-02-03 01:30:01
【问题描述】:

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

  • "id=200393/date=2019-03-25"
  • "id=200393/date=2019-03-26"
  • "id=200393/date=2019-03-27"
  • "id=200393/date=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: _*)

上面的代码可以运行,但我想做下面的事情-

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: _*)

【问题讨论】:

标签: scala list apache-spark apache-spark-sql parquet


【解决方案1】:

您可以这样读取它以读取目录 id=200393 中的所有文件夹:

val df  = spark.read.parquet("id=200393/*")

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

val df  = spark.read.parquet("id=200393/2019-09-*")

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

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

【讨论】:

  • 正如我所提到的,日期可能会不断变化。我应该添加指定更多可能。日期文件夹可能是 100,我必须添加(假设只)其中 3 个。不像,在您的解决方案中,Astrike(*) 将包括所有 100 个日期。
  • 在代码 sn-p 中,我选择了 id = 200393 的所有日期。您只想选择一些吗?
  • @Mradula 我的回答能回答你的问题吗?
  • 是的,我正在寻找一个解决方案,你提到的第三个答案。这是加载特定日期数据的更好方法。谢谢
  • 很高兴我帮助了你。 :) 如果您可以将问题标记为正确。谢谢
【解决方案2】:

如果您想保留“id”列,可以试试这个:

val df = sqlContext
     .read
     .option("basePath", "id=200393/")
     .parquet("id=200393/date=*")

【讨论】:

  • 正如我所提到的,日期可能会不断变化。我应该添加指定更多可能。日期文件夹可能是 100,我必须添加(假设只)其中 3 个。不像,在您的解决方案中,Astrike(*) 将包括所有 100 个日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 2020-01-20
  • 2020-08-15
  • 1970-01-01
  • 2021-01-12
  • 2021-08-27
相关资源
最近更新 更多