2016-10-18 3 views
0

In Pandas, kann ich erfolgreich die folgenden ausführen:Spark-Dataframe-Python

def car(t) 
    if t in df_a: 
     return df_a[t]/df_b[t] 
    else: 
     return 0 

Aber wie kann ich tun, um die genau die gleiche Sache mit Funkendatenrahmen Vielen Dank!
Die Daten sind wie diese

df_a 
a 20 
b 40 
c 60 

df_b 
a 80 
b 50 
e 100 

Das Ergebnis 0,25 sein sollte, wenn die Eingangs Auto (a)

+0

Was möchten Sie berechnen? –

+0

Ich benutze hadoop, will nur den Code von Pandas zu Funken konvertieren –

+0

Ja, aber was macht diese Funktion, sollten Sie die Eingabe und die Ausgabe zeigen. –

Antwort

3

Zuerst müssen Sie join beide Datenrahmen, dann haben Sie zu filter von dem entsprechenden Buchstaben und select wollen die Operation, die Sie brauchen.

df_a = sc.parallelize([("a", 20), ("b", 40), ("c", 60)]).toDF(["key", "value"]) 
df_b = sc.parallelize([("a", 80), ("b", 50), ("e", 100)]).toDF(["key", "value"]) 

def car(c): 
    return df_a.join(df_b, on=["key"]).where(df_a["key"] == c).select((df_a["value"]/df_b["value"]).alias("ratio")).head() 

car("a") 

# Row(ratio=0.25) 
+0

Es funktioniert. Vielen Dank ! –

+0

Noch eine Frage, kann die Eingabe ein Datenrahmen sein? Ich möchte einen Datenrahmen df_c eingeben, der den Schlüssel enthält, und dann wird car() jede Zeile des Schlüssels in df_c durchlaufen, und dann wird die Ausgabe das Verhältnis für jede Taste sein. –

+0

Sie müssen mir zuerst ein Beispiel zeigen. Vermeide es jedoch, so zwingend zu denken, Funken sind faul und die meisten Berechnungen werden parallel durchgeführt –