由于S3中的_1和_2子文件夹,Spark无法读取hive表

时间:2017-10-11 17:49:52

标签: apache-spark hive pyspark

我有3个具有相同结构的蜂巢表。

``` drop table default.test1; 创建外部表Activity
default.test1字符串,
c1字符串,
c2字符串)
行格式SERDER
' org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
作为INPUTFORMAT存储 ' org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
' org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
' S3:// s3_bucket的/ dev的/ dev / testspark / TEST1 /&#39 ;;

drop table default.test2; 创建外部表c3
default.test2字符串,
c1字符串,
c2字符串)
行格式SERDER
' org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
作为INPUTFORMAT存储 ' org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
' org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
' S3:// s3_bucket的/ dev的/ dev / testspark / TEST2 /&#39 ;;

drop table default.test3; 创建外部表c3
default.test3字符串,
c1字符串,
c2字符串)
行格式SERDER
' org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
作为INPUTFORMAT存储 ' org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
' org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
' S3:// s3_bucket的/ dev的/ dev / testspark / TEST3 /&#39 ;;

hive>插入default.test1值(" a"," b"," c"); hive>插入default.test2值(" d"," e"," f"); hive>插入覆盖表default.test3 select * from default.test1 UNION ALL select * from default.test2;```

在我使用UNION ALL test1和test2加载数据之后。 test3表s3路径在子文件夹中有如下所示的数据。 PRE 1 /
PRE 2 /

当我从hive查询test3表时,它将给出插入的数据的结果。 但是当我在火花中查询同样的东西时。这是零计数。 pyspark shell:

  
    
      

sqlContext.sql(" select * from default.test3")。count()       0

    
  

如何解决此问题?

2 个答案:

答案 0 :(得分:0)

在运行sqlContext.sql之前尝试设置以下属性

sqlContext.setConf(" mapred.input.dir.recursive""真&#34); sqlContext.setConf(" mapreduce.input.fileinputformat.input.dir.recursive""真&#34);

答案 1 :(得分:0)

要完成这项工作,还需要设置一个属性以及上面的属性。

spark.conf.set("mapred.input.dir.recursive","true") 
spark.conf.set("mapreduce.input.fileinputformat.input.dir.recursive","true")
spark.conf.set("spark.sql.hive.convertMetastoreParquet", "false")