2016-09-08 3 views
0

Ich verwende den folgenden Code:Spark DataFrame - .distinct() funktioniert nicht?

df = df.select(
      df.col("col").as("col1"), 
      df.col("col_").as("col2"); 
df = df.select("*").distinct(); 
df= df.sample(true, 0.8).limit(300); 
df= df.withColumn("random", lit(0)); 

df.show(); 

ich verschiedene Zeilen auswählen möchten, dann eine Probe nehmen und es auf 300 Datensätze beschränken jedoch df.show(); zeigt, dass es doppelte Zeilen den Platz am ganzen Körper. Was vermisse ich?

Vielen Dank!

+0

Können Sie uns etwas zeigen? –

+0

@AlbertoBonsanto Zeigen Sie was genau? Die Daten selbst sind vertraulich. Aber das sind komplette Dows, die Duplikate sind, nicht sicher, was Sie sonst noch brauchen. –

Antwort

1

zuordnen zu einem neuen Datenrahmen

val myDupeDF=myDF.select(myDF.col("EmpName")) 
myDupeDF.show() 
val myDistinctDf=myDF.select(myDF.col("EmpName")).distinct 
myDistinctDf.show(); 
+-------+ 
|EmpName| 
+-------+ 
| John| 
| John| 
| John| 
+-------+ 

Nach deutlichen

+-------+ 
|EmpName| 
+-------+ 
| John| 
+-------+ 

Update für alle Spalten ich wählen, ob alle Spalten noch es für mich arbeiten. Ich bin mit Funken 1.5.1

val myDupeDF=myDF.select(myDF.col("*")) 
    myDupeDF.show() 
    val myDistinctDf=myDF.select(myDF.col("*")).distinct 
    myDistinctDf.show(); 

Ergebnis:

+-----+-------+------+----------+ 
|EmpId|EmpName|Salary|SalaryDate| 
+-----+-------+------+----------+ 
| 1| John|1000.0|2016-01-01| 
+-----+-------+------+----------+ 

-

+0

Das einzige Problem ist, dass ich wie 30 Spalten habe, so dass sie alle in der Auswahl benennen ist umständlich. Es muss einen besseren Weg geben. –

+0

Auch nur zu einem neuen DF zuweisen so nichts tun ... –

0

Versuchen Sie, diese -

df = df.select(
      df.col("col").as("col1"), 
      df.col("col_").as("col2"); 
df = df.distinct(); 
df= df.sample(true, 0.8).limit(300); 
df= df.withColumn("random", lit(0)); 

df.show(); 

Aber ich denke, u müssen einen Spaltennamen erwähnen auszuführen eindeutiger Betrieb -

df = df.select ("COLUMNNAME"). Distinct();

+0

Ich versuchte 'df = df.distinct();' anstelle von 'df = df.select (" * "). Distinct();', funktioniert nicht. In meinem Datensatz habe ich 30 Spalten, die alle als Wahnsinn bezeichnen. –

+0

Sie brauchen auch nicht den Spaltennamen für distinct. Dokumentation sagt: 'distinct() Gibt einen neuen Datenrahmen zurück, der nur die eindeutigen Zeilen von diesem Datenrahmen enthält –