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
.