2016-09-19 96 views
0

我的數據幀有120 columns.Suppose我的數據框具有以下結構查找列具有不同值

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

,我們可以看到這裏的ID 一個值1有不同的值(10,20)。我必須找到具有特定ID的不同值的列。火花中是否有統計或其他方法來解決這個問題? 預計輸出

id new_column 
    a value1,value3 
    b value3 
+2

您可以舉一個輸入和期望輸出的例子嗎? – Yaron

+0

@yaron我已經用預期的輸出更新了我的問題。謝謝 – John

+0

現在問題很明顯,我會更新/如果我會找到答案:) – Yaron

回答

0

下面的代碼可能是答案的開始:

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

應做到以下幾點:

1)

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

選擇相關的列(如果你想採取所有列它可能是多餘的)

2)

groupBy('Id) 

具有相同ID

3)

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

輸出組行:每ID唯一的(不同)值的ID,和數量(計數)/特定的列

0

你能做到在幾個方面,其中之一是在distinct方法,即類似於SQL的行爲。另一種方法是groupBy方法,您必須在其中傳入要分組的列的名稱(例如df.groupBy("Id", "value1"))。

以下是使用distinct方法的示例。

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| 
+-----+---+