我试图从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个文件,单独阅读他们和工会他们将是忙乱。
有没有其他方法可以做到这一点?
2条答案
按热度按时间pdtvr36n1#
我在Parquet中使用HDFS,但是我遇到了同样的问题。对我来说,将basePath设置为高于在该查询中要访问的任何内容的路径级别是有效的。另外,我认为'*'是不必要的,尽管我不确定S3在这个问题上的行为。
例如
也许这对于您的S3场景来说是不正确的,但希望能帮助其他使用HDFS的人获得相同的错误。
vfwfrxfs2#
如果可以使用
Hive
,则设置两个配置和
create external table
。然后,表应该读取表中的所有子目录数据,但架构应该相同,否则将出错。