从文件列表而不是 Spark 中的路径读取是否有效?
Is it efficient to read from a LIST of FILES instead of a PATH in Spark?
我在 azure databricks 中使用 pyspark。并且需要加载数千个文件作为文件列表。使用了“多深度分区”,这使得使用基本路径读取文件变得困难。
事实上,这种多深度分区会导致嵌套目录触发此错误:
AnalysisException: Unable to infer schema for CSV. It must be
specified manually.;
因此,我们正在读取所有内容作为文件列表,我想知道当您使用以下方式读取文件时性能是否相同:
1.
spark.read.format('csv').load('/mnt/article/2021/08/09')
对
2.
spark.read.format('csv').load([
'/mnt/article/2021/08/09/test.csv',
'/mnt/article/2021/08/09/test2.csv',
'/mnt/article/2021/08/09/test3.csv'
])
对
3.
spark.read.format('csv').load(['/mnt/article/*/*/*/])
出于某些原因,我们不想使用第三个:spark.read.format('csv').load(['/mnt/article/*/*/*/)
但如果第二个真的效率不高,我们可能会重新考虑。
非常感谢您的任何意见或建议!
你自己试试吧,很好的练习。
但是,我会说 2nd
选项稍微快一些,因为它不需要额外的 ls。
但我什至不确定,因为 Spark 会检查文件是否存在。这可能取决于连接器的实现。比较:def allFiles(): Seq[FileStatus]
除非文件系统上有数千个文件,其中 ls
成本(通常是云提供商,其中 ls
是 HTTP 请求)。它不应该有什么不同,您应该从业务角度选择最清晰的选项。这是您提供的 1st
选项。
我在 azure databricks 中使用 pyspark。并且需要加载数千个文件作为文件列表。使用了“多深度分区”,这使得使用基本路径读取文件变得困难。
事实上,这种多深度分区会导致嵌套目录触发此错误:
AnalysisException: Unable to infer schema for CSV. It must be specified manually.;
因此,我们正在读取所有内容作为文件列表,我想知道当您使用以下方式读取文件时性能是否相同:
1.
spark.read.format('csv').load('/mnt/article/2021/08/09')
对
2.
spark.read.format('csv').load([
'/mnt/article/2021/08/09/test.csv',
'/mnt/article/2021/08/09/test2.csv',
'/mnt/article/2021/08/09/test3.csv'
])
对
3.
spark.read.format('csv').load(['/mnt/article/*/*/*/])
出于某些原因,我们不想使用第三个:spark.read.format('csv').load(['/mnt/article/*/*/*/)
但如果第二个真的效率不高,我们可能会重新考虑。
非常感谢您的任何意见或建议!
你自己试试吧,很好的练习。
但是,我会说 2nd
选项稍微快一些,因为它不需要额外的 ls。
但我什至不确定,因为 Spark 会检查文件是否存在。这可能取决于连接器的实现。比较:def allFiles(): Seq[FileStatus]
除非文件系统上有数千个文件,其中 ls
成本(通常是云提供商,其中 ls
是 HTTP 请求)。它不应该有什么不同,您应该从业务角度选择最清晰的选项。这是您提供的 1st
选项。