配置单元中有一个指向 s3 位置的未分区外部表。该表指向 s3 中的一个文件夹,但数据位于该文件夹内的多个子文件夹中。
即使未对表进行分区,也可以通过在蜂巢中设置一些属性来查询该表,如下所示,set hive.input.dir.recursive=true;
set hive.mapred.supports.subdirectories=true;
set hive.supports.subdirectories=true;
set mapred.input.dir.recursive=true;
但是,当在 spark 中使用同一表通过df = sqlContext.sql("select * from table_name")
之类的 sql 语句将数据加载到数据帧中时,该操作将失败,提示'The subfolders in the external s3 location is not a file'
。
我尝试使用sc.hadoopConfiguration.set("mapred.input.dir.recursive","true")
方法在 spark 中设置上述蜂巢属性,但没有帮助。看起来这只会对 sc.textFile 种加载有所帮助。
1 回答
这可以通过在 spark
sqlContext.setConf("mapreduce.input.fileinputformat.input.dir.recursive","true")
中设置以下属性来实现请注意,此处将该属性设置为 usign sqlContext 而不是 sparkContext。我在火花 1.6.2 中对此进行了测试