2017-02-27 65 views
3

我使用下面的代碼創建/插入數據蜂房表星火SQL:星火SQL saveAsTable返回空結果

val sc = SparkSession 
    .builder() 
    .appName("App") 
    .master("local[2]") 
    .config("spark.sql.warehouse.dir", "file:///tmp/spark-warehouse") 
    .enableHiveSupport() 
    .getOrCreate() 

// actual code 

result.createOrReplaceTempView("result") 
result.write.format("parquet").partitionBy("year", "month").mode(SaveMode.Append).saveAsTable("tablename") 

其中無差錯運行。 A result.show(10)證實了這一點。輸入文件是本地FS上的csv。

它根據./spark-warehouse/tablename/創建parquet文件,並使用正確的create table語句在配置單元中創建表。

git:(master) ✗ tree 
. 
└── tablename 
    ├── _SUCCESS 
    └── year=2017 
     └── month=01 
      ├── part-r-00013-abaea338-8ed3-4961-8598-cb2623a78ce1.snappy.parquet 
      ├── part-r-00013-f42ce8ac-a42c-46c5-b188-598a23699ce8.snappy.parquet 
      ├── part-r-00018-abaea338-8ed3-4961-8598-cb2623a78ce1.snappy.parquet 
      └── part-r-00018-f42ce8ac-a42c-46c5-b188-598a23699ce8.snappy.parquet 

蜂巢:

hive> show create table tablename; 
OK 
CREATE TABLE `tablename`(
    `col` array<string> COMMENT 'from deserializer') 
ROW FORMAT SERDE 
    'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES (
    'path'='file:/Users/IdeaProjects/project/spark-warehouse/tablename') 
STORED AS INPUTFORMAT 
    'org.apache.hadoop.mapred.SequenceFileInputFormat' 
OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat' 
LOCATION 
    'file:/tmp/spark-warehouse/tablename' 
TBLPROPERTIES (
    'EXTERNAL'='FALSE', 
    'spark.sql.sources.provider'='parquet', 
    'spark.sql.sources.schema.numPartCols'='2', 
    'spark.sql.sources.schema.numParts'='1', 
    'spark.sql.sources.schema.part.0'='{ 
    // fields 
    }', 
    'spark.sql.sources.schema.partCol.0'='year', 
    'spark.sql.sources.schema.partCol.1'='month', 
    'transient_lastDdlTime'='1488157476') 

但是,表是空的:使用

hive> select count(*) from tablename; 
... 
OK 
0 
Time taken: 1.89 seconds, Fetched: 1 row(s) 

軟件:星火2.1.0火花-SQL和火花hive_2.10,蜂巢2.10和一個mysql Metastore,Hadoop 2.70,macOS 10.12.3

+0

你試過從配置單元控制檯刪除表,並從火花再次創建它?您將數據保存爲parqet,但配置單元聲明'org.apache.hadoop.mapred.SequenceFileInputFormat'是輸入格式 - 我認爲這是空數的原因。 – Mariusz

回答

0

Spark SQL分區與Hive不兼容。此問題由SPARK-14927記錄。

作爲推薦的解決方法,您可以使用Hive創建分區表,並且只能從Spark插入。