【发布时间】:2018-03-23 12:05:30
【问题描述】:
我有以下 3 个结构相同的配置单元表。
drop table default.test1;
CREATE EXTERNAL TABLE `default.test1`(
`c1` string,
`c2` string,
`c3` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS 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/';
drop table default.test2;
CREATE EXTERNAL TABLE `default.test2`(
`c1` string,
`c2` string,
`c3` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS 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/';
drop table default.test3;
CREATE EXTERNAL TABLE `default.test3`(
`c1` string,
`c2` string,
`c3` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS 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/';
hive>insert into default.test1 values("a","b","c");
hive>insert into default.test2 values("d","e","f");
hive>insert overwrite table default.test3 select * from default.test1 UNION ALL select * from default.test2;
在我使用 test1 和 test2 的 UNION ALL 加载数据后。 test3 表 s3 路径在子文件夹中有数据,如下所示。
PRE 1/
PRE 2/
当我从 hive 查询 test3 表时,它会给出插入数据的结果。 但是当我在 Spark 中查询相同的内容时。它的计数为零。 pyspark 外壳:
>>>sqlContext.sql("select * from default.test3").count()
>>>0
如何解决这个问题?
【问题讨论】:
-
Spark 版本为 2.0
-
刚刚想到,如果我可以让 hive 将输出写入单个文件而不是 2 个子目录,我应该能够通过 Spark 读取输出表。
-
设置 hive.exec.reducers.max=1;我在蜂巢中设置了这个属性。并执行了插入覆盖 stmt。我仍然看到创建的子文件夹。所以问题还没有解决。
标签: apache-spark hive pyspark