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