查找具有不同值的列

时间:2016-09-19 12:44:20

标签: scala apache-spark spark-dataframe

我的数据框有120列。假设我的数据框具有以下结构

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 a value1 具有不同的值(10,20)。我必须找到具有特定id的不同值的列。是否有任何统计或任何其他方法来解决这个问题? 预期产出

   id new_column
   a value1,value3
   b value3

2 个答案:

答案 0 :(得分: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|
+-----+---+

答案 1 :(得分: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和数量(计数)