查找具有不同值的列
Find columns with different values
我的数据框有 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 a, value1 有不同的值(10,20)。我必须找到具有特定 id 的不同值的列。 spark 中是否有任何统计或任何其他方法来解决这个问题?
预期输出
id new_column
a value1,value3
b value3
您可以通过多种方式完成此操作,其中之一是 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|
+-----+---+
以下代码可能是答案的开始:
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")
select 相关列(如果你想获取所有列可能是多余的)
2)
groupBy('Id)
将具有相同 ID 的行分组
3)
agg('Id, countDistinct('value1),countDistinct('value2),countDistinct('value3))
输出:ID,以及每个 ID/specific 列的唯一(不同)值的数量(计数)
我的数据框有 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 a, value1 有不同的值(10,20)。我必须找到具有特定 id 的不同值的列。 spark 中是否有任何统计或任何其他方法来解决这个问题? 预期输出
id new_column
a value1,value3
b value3
您可以通过多种方式完成此操作,其中之一是 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|
+-----+---+
以下代码可能是答案的开始:
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")
select 相关列(如果你想获取所有列可能是多余的)
2)
groupBy('Id)
将具有相同 ID 的行分组
3)
agg('Id, countDistinct('value1),countDistinct('value2),countDistinct('value3))
输出:ID,以及每个 ID/specific 列的唯一(不同)值的数量(计数)