2017-01-12 2 views
0

ここでは、データフレームをパーティション化されたハイブテーブルに保持しようとしています。私はそれを何度も見てきましたが、間違いを見つけることはできませんでした。指定されたパーティションの列がテーブルのパーティションの列と一致しません。パーティションの列として使用してください。

org.apache.spark.sql.AnalysisException:指定されたパーティション列 (タイムスタンプ値)は、テーブルのパーティション列と一致していません。 パーティションの列として()を使用してください。

ここここで、外部テーブルを使用して作成されるスクリプト、

CREATE EXTERNAL TABLEIF NOT EXISTS events2 (
action string 
,device_os_ver string 
,device_type string 
,event_name string 
,item_name string 
,lat DOUBLE 
,lon DOUBLE 
,memberid BIGINT 
,productupccd BIGINT 
,tenantid BIGINT 
) partitioned BY (timestamp_val DATE) 
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 'maprfs:///location/of/events2' 
tblproperties ('serialization.null.format' = ''); 

ここ

hive> describe formatted events2; 
OK 
# col_name    data_type    comment    

action     string          
device_os_ver   string          
device_type    string          
event_name    string          
item_name    string          
lat      double          
lon      double          
memberid    bigint          
productupccd   bigint          
tenantid    bigint          

# Partition Information  
# col_name    data_type    comment    

timestamp_val   date           

# Detailed Table Information   
Database:    default         
CreateTime:    Wed Jan 11 16:58:55 IST 2017  
LastAccessTime:   UNKNOWN     
Protect Mode:   None      
Retention:    0       
Location:    maprfs:/location/of/events2 
Table Type:    EXTERNAL_TABLE   
Table Parameters:   
    EXTERNAL    TRUE     
    serialization.null.format      
    transient_lastDdlTime 1484134135   

# Storage Information   
SerDe Library:   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 
Compressed:    No      
Num Buckets:   -1      
Bucket Columns:   []      
Sort Columns:   []      
Storage Desc Params:   
    serialization.format 1     
Time taken: 0.078 seconds, Fetched: 42 row(s) 

は「EVENTS2」テーブルのフォーマットについて説明した結果でありますデータが分割されてテーブルに格納されるコード行。

val tablepath = Map("path" -> "maprfs:///location/of/events2") 

AppendDF.write.format("parquet").partitionBy("Timestamp_val").options(tablepath).mode(org.apache.spark.sql.SaveMode.Append).saveAsTable("events2") 

アプリケーションを実行している間、私は

以下

指定されたパーティション列(timestamp_val)を取得していますがtable.Pleaseの 列がパーティション列として)(使用パーティションと一致していません。

私は明白な誤りを犯す可能性があり、任意のヘルプは非常にupvoteで高く評価され:)

答えて

0

DFのスキーマを印刷してください:

AppendDF.printSchema() 

は、それが不一致を入力していないことを確認します?

+0

ルート | - アクション:文字列(真= NULL可能) | - device_os_ver:文字列(真= NULL可能) | - DEVICE_TYPE:文字列(真= NULL可能) | - EVENT_NAME:文字列(NULL可能= true) - item_name:string(nullable = true) - lat:double(nullable = true) | - lon:double(nullable = true) | - memberid:long(nullable = true) | - productUpccd:long(nullable = true) | - テナントード:long(nullable = true) | - timestamp_val:timestamp(nullable = false) –

+0

Hiveテーブルの列をTIMESTAMPとして宣言する必要があります。 – KiranM

+0

はいkiran私のハイブバージョンごとに変更を加えました。私の寄木細工は列としてタイムスタンプを取ることができませんので、タイムスタンプをこのようなデータフレームの文字列に変更しました。http://stackoverflow.com/questions/41607192/how -to-convert-current-timestamp-to-a-string-in-scala –

関連する問題