【问题标题】:Spark scala - compare column value with parametherSpark scala - 将列值与参数进行比较
【发布时间】:2019-03-13 18:44:22
【问题描述】:

想要将数据框列与值进行比较。我试图转换价值并使用lit(),但没有任何结果。下面我附上我的硬编码版本,但它不满足要求。

object Analyzer {
  def main(args: Array[String]): Unit = {

    // my lav used to comare with column
    val minEfficiency: Double = 0.9

    // I would like compare column with declared val
    // here is hardcoded (poor) version
    val metrics = dataframe.withColumn("State",
      when($"Efficiency" >= 0.9, "ok").otherwise("not ok")
    )

  }
}

数据框信息:

scala> dataframe.printSchema()
root
 |-- SensorId: integer (nullable = true)
 |--  Efficiency: double (nullable = true)
scala> dataframe.show()
+--------+-----------+
|SensorId| Efficiency|
+--------+-----------+
|       1|      0.356|
|       2|       0.99|
|       3|        1.0|
|       4|      0.256|
|       5|        0.9|
+--------+-----------+

【问题讨论】:

  • 你可以添加一些数据并说清楚,无法得到你的要求,你的意思是这不起作用吗? when($"Efficiency" >= minEfficiency, "ok").otherwise("not ok")
  • 这个怎么样? dataframe.withColumn("State", when(col("Efficiency") >= lit(minEfficiency), "ok").otherwise("not ok")你得到什么样的错误信息?
  • @astro_asz,您使用 col() 的解决方案非常完美!请将您的评论添加到答案部分。

标签: scala apache-spark dataframe


【解决方案1】:

您是否尝试过使用col

dataframe.withColumn("State", when(col("Efficiency") >= lit(minEfficiency), "ok").otherwise("not ok"))

【讨论】:

    【解决方案2】:

    您也可以使用transform 执行以下操作:

    import org.apache.spark.sql.functions._
    import org.apache.spark.sql._
    
    val df = Seq(10,0.9,-1,0.3).toDF("Efficiency")
    val minEfficiency = 0.9
    
    def withMinEfficiency(minValue: Double)(df: DataFrame): DataFrame = {
      df.withColumn("State", when('Efficiency >= minValue,"Ok").otherwise("Not Ok"))
    }
    
    df.transform(withMinEfficiency(minEfficiency)).show(false)
    

    输出:

    +----------+------+
    |Efficiency|State |
    +----------+------+
    |10.0      |Ok    |
    |0.9       |Ok    |
    |-1.0      |Not Ok|
    |0.3       |Not Ok|
    +----------+------+     
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多