通过Spark读取保存在文件夹中的所有Parquet文件

天河三天

我有一个包含Parquet文件的文件夹。像这样:

scala> val df = sc.parallelize(List(1,2,3,4)).toDF()
df: org.apache.spark.sql.DataFrame = [value: int]

scala> df.write.parquet("/tmp/test/df/1.parquet")

scala> val df = sc.parallelize(List(5,6,7,8)).toDF()
df: org.apache.spark.sql.DataFrame = [value: int]

scala> df.write.parquet("/tmp/test/df/2.parquet")

保存数据帧后,当我去读取文件df夹中的所有镶木地板文件时,它给了我错误。

scala> val read = spark.read.parquet("/tmp/test/df")
org.apache.spark.sql.AnalysisException: Unable to infer schema for Parquet. It must be specified manually.;
  at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$8.apply(DataSource.scala:189)
  at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$8.apply(DataSource.scala:189)
  at scala.Option.getOrElse(Option.scala:121)
  at org.apache.spark.sql.execution.datasources.DataSource.org$apache$spark$sql$execution$datasources$DataSource$$getOrInferFileFormatSchema(DataSource.scala:188)
  at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:387)
  at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
  at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:441)
  at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:425)
  ... 48 elided

我知道我可以通过提供完整路径来读取Parquet文件,但是如果有一种方法可以读取文件夹中的所有Parquet文件,那会更好。

以利亚

Spark不会像您想象的那样写/读实木复合地板。

它使用Hadoop库写入/读取分区的实木复合地板文件。

因此,您的第一个实木复合地板文件位于目录的路径/tmp/test/df/1.parquet/1.parquet这意味着从实木复合地板读取时,您需要提供实木复合地板目录的路径或单个文件的路径。

val df = spark.read.parquet("/tmp/test/df/1.parquet/")

我建议您阅读官方文档以了解更多详细信息。[cf. SQL编程指南-Parquet文件]

编辑:

您必须在寻找这样的东西:

scala> sqlContext.range(1,100).write.save("/tmp/test/df/1.parquet")

scala> sqlContext.range(100,500).write.save("/tmp/test/df/2.parquet")

scala> val df = sqlContext.read.load("/tmp/test/df/*")
// df: org.apache.spark.sql.DataFrame = [id: bigint]

scala> df.show(3)
// +---+
// | id|
// +---+
// |400|
// |401|
// |402|
// +---+
// only showing top 3 rows

scala> df.count
// res3: Long = 499

您还可以在文件路径URI中使用通配符。

您可以提供以下多个文件路径:

scala> val df2 = sqlContext.read.load("/tmp/test/df/1.parquet","/tmp/test/df/2.parquet")
// df2: org.apache.spark.sql.DataFrame = [id: bigint]

scala> df2.count
// res5: Long = 499

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Java读取文件夹中的所有文件?

逐行读取文件夹中的所有.txt文件

如何从Python文件夹读取并保存在另一个文件夹中

Swift 3:如何获取保存在Documents文件夹中的文件的路径

读取Spark中嵌套文件夹中的所有文件

spark无法使用合并模式从不同文件夹中读取所有orc文件

如何随机读取文件夹中的所有文件

从文件夹中读取所有.txt文件?

Apache Spark无法读取通过流作业写入的Parquet文件夹

如何同步目标文件夹中存在的所有文件夹

如何读取文件夹中存在的所有Zip文件,并创建包含所有内容的新文本文件

读取文件夹和子文件夹中的所有文件-进度和大小

AppGrid将所有图像保存在“下载”文件夹中

通过R读取保存在csv文件中的XML数据

将干预图像保存在Laravel 5的所有者文件夹中

从目录(在共享路径上)获取所有文件,并将它们保存在wordpress uploads文件夹中

如何使用Groovy读取文件夹中的所有文件并替换文件中的模式

Powershell脚本检查给定文件夹文件夹中是否存在文件列表中的所有文件

读取文件夹中的所有xml文件并将其保存在数据表中

保存在特定文件夹中后,将所有者更改为文件

Matlab:读取文件夹中的所有wave

如何获取保存在服务器文件夹中的图像uri?

只要父文件夹中不存在文件,就将所有文件从“旧”文件夹移到父文件夹中

读取保存在 Jupyter 文件夹中的 Excel 文件

使用电子显示或读取操作系统或系统中存在的所有文件和文件夹

vb.net 如何获取保存在文件夹中的文本文件的名称?

如何从文件夹中读取所有图像并将同名图像保存在其他文件夹python中

根据文件名打开文件夹中的所有文件并重新保存在创建的文件夹目录中

从位于文件夹中的所有 csv 文件(8000 个文件)中复制第二行,并将其保存在新的 csv 文件中,包括标题