簡體   English   中英

如何在 spark scala 中讀取多個鑲木地板文件

[英]How can I read multiple parquet files in spark scala

以下是一些文件夾,它們可能會隨着時間的推移而不斷更新。 他們有多個.parquet 文件。 如何在 scala 的 Spark dataframe 中讀取它們?

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

上面的代碼正在工作,但我想做如下的事情 -

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

您可以通過這種方式讀取它以讀取目錄 id=200393 中的所有文件夾:

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

如果您只想 select 某些日期,例如僅 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:_*)

如果你想保留列“id”,你可以試試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM