2016-03-23 7 views
1

S3'ten veri yüklemeye çalışıyorum ve sonra bölümlü bir kovan tablosuna veriyorum.Spark SQL insertInto(), bölüm anahtarı için başarısız

Önce create_date (bigint) ile bölüm anahtarı olarak başladım ve iyi çalıştı, ancak şimdi aynı verileri bir create_month bölüm anahtarı ile eklemeye çalıştığımda başarısız oluyor.

İşte kod

var hiveCtx = new org.apache.spark.sql.hive.HiveContext(sc) 
var df = hiveCtx.read.json("s3n://spark-feedstore/2016/1/*") 
import org.apache.spark.storage.StorageLevel 
import org.apache.spark.sql.SaveMode 
hiveCtx.sql("SET hive.exec.dynamic.partition = true") 
hiveCtx.sql("SET hive.exec.dynamic.partition.mode = nonstrict") 

df.persist(StorageLevel.MEMORY_AND_DISK) 
df.registerTempTable("posts") 

ilk tabloda kullanarak ilk tabloya ekleme 2 masanın

[external_id,string,] 
[tags,array<string>,] 
[creation_date,bigint,] 
[video_url,string,] 
[creation_month,date,] 
# Partition Information  
creation_month bigint 

ait

[external_id,string,] 
[tags,array<string>,] 
[creation_date,bigint,] 
[video_url,string,] 
# Partition Information  
creation_date bigint 

Şema şema gayet gider olduğunu. Bununla birlikte, ikinci tablaya yerleştirme hata verir.

var udf = hiveCtx .sql("select externalId as external_id, first(sourceMap['brand_hashtags']) as brand_hashtags, first(sourceMap['creation_date']) as creation_date, 

birinci (sourceMap [ 'video_url']) video_url trunc olarak (from_unixtime (birinci (sourceMap [ 'creation_date'])/1000), 'HESAP') HariciKimlik tarafından mesaj gruptan creation_month olarak ")

udf.write.mode(SaveMode.Append).partitionBy("creation_month").insertInto("posts_2") 

Hata:. Bence başka alan creation_month eklediğinizde değiştirir emin değilim

org.apache.spark.sql.AnalysisException: cannot resolve 'cast(creation_date as array<string>)' due to data type mismatch: cannot cast LongType to ArrayType(StringType,true); 

iki tablo için şemanın her yönüyle tam olarak aynı görünüyor

.

cevap

3

Problemim var. Sütunların sırasına göre.

saha düzeni

external_id, tag, video_url, creation_date 

oldu Ama seçme sorguda bunu

external_id, creation_date, tag, video_url 

Dolayısıyla Hive dizisi

olarak CREATION_DATE dökme çalışıyordu vardı