2017-02-27 5 views
3

を返します。 result.show(10)がこれを確認します。入力ファイルはローカルFS上のcsvです。スパークSQL saveAsTableは、私がスパークSQLでハイブのテーブルにデータを挿入/作成するための次のコードを使用しています空の結果

./spark-warehouse/tablename/の下にパーケットファイルを作成し、正しい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) 

ソフトウェアを使用:スパーク-SQLと火花hive_2.10、ハイブ2.10とスパーク2.1.0およびmysqlメタストア、Hadoop 2.70、macOS 10.12.3

+0

ハイブコンソールからテーブルを削除して、sparkから再度作成しようとしましたか?データをparqetとして保存しますが、ハイブでは 'org.apache.hadoop.mapred.SequenceFileInputFormat'が入力形式です - これは空のカウントの原因だと思います。 – Mariusz

答えて

0

スパークSQLパーティションはHiveと互換性がありません。この問題はSPARK-14927によって報告されています。

推奨される回避策として、Hiveでパーティションテーブルを作成し、Sparkからのみ挿入することができます。

関連する問題