scala - 如何在 spark scala 中使用子查询创建列表达式
问题描述
给定任何df,我想为df计算另一个名为“has_duplicates”的列,然后添加一个带有布尔值的列,以确定每行是否唯一。示例输入 df:
val df = Seq((1, 2), (2, 5), (1, 7), (1, 2), (2, 5)).toDF("A", "B")
给定一个 input columns: Seq[String]
,我知道如何获取每一行的计数:
val countsDf = df.withColumn("count", count("*").over(Window.partitionBy(columns.map(col(_)): _*)))
但我不确定如何使用它为最后一列创建列表达式,指示每一行是否唯一。
就像是
def getEvaluationExpression(df: DataFrame): Column = {
when("count > 1", lit("fail").otherwise(lit("pass"))
}
但是需要使用上面的查询在现场评估计数。
解决方案
试试下面的代码。
scala> df.withColumn("has_duplicates", when(count("*").over(Window.partitionBy(df.columns.map(col(_)): _*)) > 1 , lit("fail")).otherwise("pass")).show(false)
+---+---+--------------+
|A |B |has_duplicates|
+---+---+--------------+
|1 |7 |pass |
|1 |2 |fail |
|1 |2 |fail |
|2 |5 |fail |
|2 |5 |fail |
+---+---+--------------+
或者
scala> df.withColumn("count",count("*").over(Window.partitionBy(df.columns.map(col(_)): _*))).withColumn("has_duplicates", when($"count" > 1 , lit("fail")).otherwise("pass")).show(false)
+---+---+-----+--------------+
|A |B |count|has_duplicates|
+---+---+-----+--------------+
|1 |7 |1 |pass |
|1 |2 |2 |fail |
|1 |2 |2 |fail |
|2 |5 |2 |fail |
|2 |5 |2 |fail |
+---+---+-----+--------------+
推荐阅读
- ios - Swift - 带和不带图像的多部分/表单数据 POST 请求(上传)
- jquery - 使用编辑器数据表从记录中获取 id
- python - 如何使用python中的循环重置多个熊猫数据框的索引?
- azure - 以编程方式配置/测试 SSO 的指南
- javascript - 无法在快速生成器上启动 npm
- ios - 通过 Plist 设置 iOS 应用程序徽标不起作用
- c++ - 如何为 QPushButton 的工具提示设置背景?
- powerbi - PowerBI - 具有多个标准的累积总计
- html - 列左对齐问题 - 仅限移动设备
- typescript - 在 typescript 3.4.1 中更改了 Immutable.Record 类型行为。向上转型不再有效