断言失败:检测到冲突的目录结构。可疑路径

urv*_*tel 7 amazon-s3 apache-spark pyspark databricks

我正在尝试从 aws s3 读取数据,但出现错误。

s3存储桶和路径例如如下:

s3://USA/Texas/Austin/valid
s3://USA/Texas/Austin/invalid 
s3://USA/Texas/Houston/valid
s3://USA/Texas/Houston/invalid 
s3://USA/Texas/Dallas/valid
s3://USA/Texas/Dallas/invalid 
s3://USA/Texas/San_Antonio/valid 
s3://USA/Texas/San_Antonio/invalid 
Run Code Online (Sandbox Code Playgroud)

当我尝试读为

spark.read.parquet("s3://USA/Texas/Austin/valid")
Run Code Online (Sandbox Code Playgroud)

或者

spark.read.parquet("s3://USA/Texas/Austin/invalid")
Run Code Online (Sandbox Code Playgroud)

或者

spark.read.parquet("s3://USA/Texas/Austin")
Run Code Online (Sandbox Code Playgroud)

它工作得很好。

但当我尝试读为

spark.read.parquet("s3://USA/Texas/*")
Run Code Online (Sandbox Code Playgroud)

或者

spark.read.parquet("s3://USA/Texas")
Run Code Online (Sandbox Code Playgroud)

它抛出异常。

java.lang.AssertionError:断言失败:检测到冲突的目录结构。可疑路径:

如果提供的路径是分区目录,请在数据源选项中设置“basePath”指定表的根目录。如果有多个根目录,请分别加载,然后合并。

根据建议,我可以单独阅读它们,但我有超过 500 个文件,单独阅读它们并将它们合并起来会很忙。

还有其他方法可以实现这一目标吗?

Lam*_*nus -1

如果可以使用Hive,则设置两个配置

hive.input.dir.recursive=true
hive.mapred.supports.subdirectories=true
Run Code Online (Sandbox Code Playgroud)

create external table在根路径上。然后,该表应该读取表中的所有子目录数据,但架构应该相同,否则会出错。