2015-07-21 11 views
5

Sto utilizzando Spark 1.4. HiveContext è utilizzato per connettere Hive. Ho fatto la seguenteSpark HiveContext non recupera i record appena inseriti dalla tabella Hive

val hx = new HiveContext(sc) 
import hx.implicits._ 
hx.sql("select * from tab").show 

// va bene, risultato è stato mostrato come previsto

poi, ho inserito un paio di record nella scheda da console Beeline

hx.refreshTable("tab") 
hx.sql("select * from tab").show 

// ancora vecchi record, nessun record appena inserito

La mia domanda è: perché HiveContext non ha recuperato i record appena inseriti?

+1

Hai trovato una soluzione, alla fine? Sto avendo lo stesso problema. – vermillon

+0

stesso problema per me –

risposta

0

hiveContext. RefreshTable (tableName: String) - questo rinfrescherà solo i metadati del tavolo (non i dati effettivi)

Note da documentaition ufficiale: (crediti: https://spark.apache.org)

RefreshTable (tableName: String) : Unità

Invalidare e aggiornare tutti i metadati della tabella specificata nella cache. Per motivi di prestazioni, Spark SQL o la libreria di origini dati esterne che utilizza potrebbero memorizzare nella cache determinati metadati relativi a una tabella, ad esempio la posizione dei blocchi. Quando coloro cambiamento al di fuori della Spark SQL, gli utenti dovrebbe chiamare questa funzione per invalidare la cache

Per retrive record appena inseriti: - rimozione dati dalla cache prima e la cache di nuovo usando, uncacheTable (String tableName) e cacheTable (String tableName

+3

la tabella nella domanda non era nemmeno memorizzata nella cache in primo luogo. Inoltre, ho provato a memorizzare nella cache -> uncache -> cache, ma non ho ancora recuperato i record appena inseriti. La tua soluzione proposta ha funzionato nella tua installazione? – david2028

-1

In un caso leggermente diverso, ho un RDD proveniente da un'istruzione Spark SQL tramite HiveContext. La soluzione che ha funzionato per me dopo alcuni esperimenti è stata la rigenerazione effettiva dello RDD stesso.

Non importa se si utilizza DDL di Spark SQL o si inviano istruzioni SQL direttamente tramite hiveContext.sql.

Ho visto persone che usano un "trucco di conteggio" per forzare il ricalcalo di un set di dati, ma almeno nei miei tentativi non sono riuscito a vedere i nuovi dati in questo modo.

In ogni caso provare a memorizzare nella cache, rinfrescare e gli amici non ha funzionato per me, se qualcuno ha qualche schema adeguato qui per favore condividere.

0

Se la tabella di destinazione è partizionata, è necessario inserire l'opzione 'partition'. Se perdi la partizione, i dati non saranno visibili.

INSERT OVERWRITE TABLE tablename1 PARTITION (partcol1=val1, partcol2=val2...) SELECT col1,col2,.... FROM tablename2 
Problemi correlati