2015-04-09 24 views
21

Nella versione Spark 1.2.0 si potrebbe usare subtract con 2 SchemRDD s per finire con il solo diversi contenuti dal primoSpark: sottraggono due DataFrames

val onlyNewData = todaySchemaRDD.subtract(yesterdaySchemaRDD) 

onlyNewData contiene le righe che todaySchemRDD non esistono in yesterdaySchemaRDD.

Come è possibile ottenere questo risultato con DataFrames in Spark versione 1.3.0?

risposta

34

Secondo il api docs, facendo:

dataFrame1.except(dataFrame2) 

restituirà una nuova dataframe contenente righe in dataFrame1 ma non in dataframe2.

+2

Cosa succede se ho bisogno di eseguire l'eccezione non su tutta la fila, ma solo una colonna? Per esempio. Le righe 'dataFrame1' tranne quelle in cui' primary_key' non appare in 'dataFrame2'? (sembra "sottrarreByKey" per gli RDD, ma preferibilmente per un dataframe. –

+4

@KatyaHandler Puoi usare un 'LEFT JOIN' accoppiato con un' IS NULL' sulla chiave del dataframe unito.Il sql per questo è qualcosa del tipo: 'SELECT * FROM df1 LEFT JOIN df2 ON df1.id = df2.id DOVE df2.id È NULL' – Interfector

+0

@KatyaHandler: Sto anche cercando la stessa soluzione .. potresti dirmi come hai realizzato usando DF, puoi si prega di aggiornare la risposta – Shankar

10

In pyspark DOCS sarebbe sottrarre

df1.subtract(df2) 
+1

questa è la risposta corretta come di alcune uscite fa. sicuramente per 2.1.0 –

+0

Hey @Teja Il metodo sottrazione sembra essere case sensitive È possibile ignorare case sottrarre –

+1

Nota che 'sottrarre()' è disponibile per il dataframe di Python Spark, ma la funzione non esiste per Sca il dataframe della Spark. – stackoverflowuser2010

Problemi correlati