PYSPARK - 如何读取 S3 中所有子文件夹中的所有 csv 文件?

Posted

技术标签:

【中文标题】PYSPARK - 如何读取 S3 中所有子文件夹中的所有 csv 文件?【英文标题】:PYSPARK - How to read all csv files in all subfolders in S3? 【发布时间】:2019-05-02 13:19:52 【问题描述】:

在 Amazon S3 中,我有一个包含大约 30 个子文件夹的文件夹,每个子文件夹中包含一个 csv 文件。

我想要一种从所有子文件夹中读取每个 csv 文件的简单方法 - 目前,我可以通过指定路径 n 次来做到这一点,但我觉得必须有更简洁的方法。

例如dataframe = sqlContext.read.csv([ path1, path2, path3,etc..], header=True)

【问题讨论】:

你试过通配符*吗? 另外,如果你需要比通配符更复杂的东西,这个答案有更多你可以做的例子:***.com/a/31784292/5054505 【参考方案1】:

像这样模拟你的情况(使用 jupyter 魔法命令,这样你就可以看到文件夹结构)

... 只需使用 * ... 还假设每个 csv 具有相同的列数

! ls sub_csv/
print("="*10)
! ls sub_csv/csv1/
! ls sub_csv/csv2/
! ls sub_csv/csv3/
print("="*10)
! cat sub_csv/csv1/*.csv
! cat sub_csv/csv2/*.csv
! cat sub_csv/csv3/*.csv

csv1
csv2
csv3
==========
csv1.csv
csv2.csv
csv3.csv
==========
id
1
id
2
id
3

spark\
.read\
.option("header", "true")\
.csv("sub_csv/*")\
.show()

+---+
| id|
+---+
|  1|
|  2|
|  3|
+---+

【讨论】:

我收到错误消息IllegalArgumentException: u'java.net.URISyntaxException: Relative path in absolute URI: 2019-03-25T16:25:47.330010' - 知道为什么吗? 不确定看不到命令​​...为什么使用 sqlContext 而不是 sparkSession?

以上是关于PYSPARK - 如何读取 S3 中所有子文件夹中的所有 csv 文件?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Pyspark 2.4.4 读取 s3 存储桶中的镶木地板文件

如何在 pyspark 中读取 s3 上的表格数据?

读取 PySpark 中的所有分区 parquet 文件

PySpark S3 文件读取性能考虑

如何从数据帧列中的路径读取 AWS 上 pyspark 中的许多 Json 文件?

使用Pyspark读取S3上随机的文件样本