从未分区的配置单元表的子文件夹中获取数据到spark中的数据框中

时间:2017-10-16 06:34:21

标签: apache-spark amazon-s3 hive

hive中有一个外部表,指向未分区的s3位置。该表指向s3中的文件夹,但数据位于该文件夹内的多个子文件夹中。

即使表没有通过在hive中设置几个属性来分区,也可以查询此表,如下所示, 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中设置上面的hive属性,但它没有帮助。看起来这只会对sc.textFile类型的加载有所帮助。

1 个答案:

答案 0 :(得分:0)

这可以通过在spark中设置以下属性来实现, sqlContext.setConf("mapreduce.input.fileinputformat.input.dir.recursive","true")

请注意,该属性设置为使用sqlContext而不是sparkContext。 我在spark 1.6.2

中对此进行了测试