Apache Spark Assert失败:检测到冲突的目录结构,可疑路径

5us2dqdw  于 2022-11-25  发布在  Apache
关注(0)|答案(2)|浏览(165)

我试图从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

当我试着读成

spark.read.parquet("s3://USA/Texas/Austin/valid")

spark.read.parquet("s3://USA/Texas/Austin/invalid")

spark.read.parquet("s3://USA/Texas/Austin")

它工作得很好。
但当我试着读成

spark.read.parquet("s3://USA/Texas/*")

spark.read.parquet("s3://USA/Texas")

它将抛出异常。
java.lang.AssertionError:Assert失败:检测到冲突的目录结构。可疑路径:
如果提供的路径是分区目录,请在数据源的选项中设置“basePath”来指定表的根目录,如果有多个根目录,请分别加载后再合并。
根据建议,我可以单独阅读他们,但我有超过500个文件,单独阅读他们和工会他们将是忙乱。
有没有其他方法可以做到这一点?

pdtvr36n

pdtvr36n1#

我在Parquet中使用HDFS,但是我遇到了同样的问题。对我来说,将basePath设置为高于在该查询中要访问的任何内容的路径级别是有效的。另外,我认为'*'是不必要的,尽管我不确定S3在这个问题上的行为。
例如

spark.read.option("basePath", "s3://USA/Texas/").parquet("s3://USA/Texas/")

也许这对于您的S3场景来说是不正确的,但希望能帮助其他使用HDFS的人获得相同的错误。

vfwfrxfs

vfwfrxfs2#

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

hive.input.dir.recursive=true
hive.mapred.supports.subdirectories=true

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

相关问题