ここでは、データフレームをパーティション化されたハイブテーブルに保持しようとしています。私はそれを何度も見てきましたが、間違いを見つけることはできませんでした。指定されたパーティションの列がテーブルのパーティションの列と一致しません。パーティションの列として使用してください。
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で高く評価され:)
ルート | - アクション:文字列(真= 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) –
Hiveテーブルの列をTIMESTAMPとして宣言する必要があります。 – KiranM
はいkiran私のハイブバージョンごとに変更を加えました。私の寄木細工は列としてタイムスタンプを取ることができませんので、タイムスタンプをこのようなデータフレームの文字列に変更しました。http://stackoverflow.com/questions/41607192/how -to-convert-current-timestamp-to-a-string-in-scala –