2016-09-19 5 views
0

Mein Datenrahmen hat 120 columns.Suppose meines Datenrahmen die unten gezeigte StrukturFinden Spalten mit unterschiedlichen Werten

Id value1 value2 value3 
a 10  1983 19 
a 20  1983 20 
a 10  1983 21 
b 10  1984 1 
b 10  1984 2 

hat man hier die ID sieht ein, Wert1 unterschiedliche Werte haben (10,20). Ich muss Spalten mit den verschiedenen Werten für eine bestimmte ID finden. Gibt es statistische oder andere Ansätze, um dieses Problem zu lösen? Erwartete Ausgabe

id new_column 
    a value1,value3 
    b value3 
+2

Können Sie bitte ein Beispiel für die Eingabe und erwartete Ausgabe geben? – Yaron

+0

@yaron Ich habe meine Frage mit der erwarteten Ausgabe aktualisiert. Danke – John

+0

jetzt ist die Frage klar, ich werde updaten wann/wenn ich eine Antwort finde :) – Yaron

Antwort

0

Der folgende Code könnte ein Anfang einer Antwort lauten:

val result = log.select("Id","value1","value2","value3").groupBy('Id).agg('Id, countDistinct('value1),countDistinct('value2),countDistinct('value3)) 

Sollte wie folgt vorgehen:

1)

log.select("Id","value1","value2","value3") 

relevanten Spalten auswählen (wenn Sie möchten um alle Spalten zu nehmen, könnte es überflüssig sein)

2)

groupBy('Id) 

Gruppenzeilen mit derselben ID

3)

agg('Id, countDistinct('value1),countDistinct('value2),countDistinct('value3)) 

output: ID, und die Anzahl (Anzahl) von eindeutigen (distinct) Werten pro ID/bestimmte Spalte

0

Sie können es auf verschiedene Weise tun, einer von ihnen das Verfahren distinct zu sein, ist, dass mit dem SQL-Verhalten ähnlich. Eine andere wäre die groupBy Methode, bei der Sie den Namen der Spalten, die Sie gruppieren möchten, übergeben müssen (z. B. df.groupBy("Id", "value1")).

Unten finden Sie ein Beispiel mit der distinct Methode.

scala> case class Person(name : String, age: Int) 
defined class Person 

scala> val persons = Seq(Person("test", 10), Person("test", 20), Person("test", 10)).toDF 
persons: org.apache.spark.sql.DataFrame = [name: string, age: int] 

scala> persons.show 
+----+---+ 
|name|age| 
+----+---+ 
|test| 10| 
|test| 20| 
|test| 10| 
+----+---+ 

scala> persons.select("name", "age").distinct().show 
+-----+---+ 
| name|age| 
+-----+---+ 
| test| 10| 
| test| 20| 
+-----+---+ 
Verwandte Themen