2015-04-09 24 views
21

In Spark-Version 1.2.0 ein subtract mit 2 SchemRDD s nur mit dem anderen Inhalt von der erstenFunken: subtrahieren zwei Datenrahmen

val onlyNewData = todaySchemaRDD.subtract(yesterdaySchemaRDD) 

onlyNewData enthält die Zeilen in todaySchemRDD am Ende verwenden könnte, die existiert nicht in yesterdaySchemaRDD. Wie kann dies erreicht werden mit DataFrames in Spark Version 1.3.0?

Antwort

34

Nach den api docs, tun:

dataFrame1.except(dataFrame2) 

wird einen neuen Datenrahmen zurückgeben Zeilen in dataFrame1 enthalten, aber nicht in dataframe2.

+2

Was subtrahieren, wenn ich die Ausnahme durchführen müssen nicht auf die ganze Reihe, aber nur eine Spalte? Z.B. 'dataframe1' rows außer denen, bei denen der' primary_key' nicht in 'dataFrame2' erscheint? (sieht für DBs wie 'subtractByKey' aus, aber am besten für einen Datenrahmen. –

+4

@KatyaHandler Sie können einen' LEFT JOIN' mit einem 'IS NULL' auf dem Schlüssel des verknüpften Datenrahmens verwenden. Das sql ist etwa so:' SELECT * FROM df1 LINKER JOIN df2 ON df1.id = df2.id WHERE df2.id IST NULL' – Interfector

+0

@KatyaHandler: Ich suche auch nach der gleichen Lösung .. könntest du mir bitte sagen, wie du das mit DF erreicht hast, kannst du Bitte aktualisiere die Antwort – Shankar

10

In pyspark DOCS wäre es

df1.subtract(df2) 
+1

das ist die richtige Antwort von einigen Releases her 2.1.0 –

+0

Hey @Teja Die Subtraktionsmethode scheint Groß- und Kleinschreibung zu beachten Ist es möglich, die Groß-/Kleinschreibung zu ignorieren, während –

+1

abgezogen wird, beachten Sie, dass subtract() 'für den Datenrahmen von Python Spark verfügbar ist la Sparks Datenrahmen. – stackoverflowuser2010

Verwandte Themen