Spark scala - сравнить значение столбца с параметром - PullRequest
0 голосов
/ 13 марта 2019

хотел бы сравнить столбец данных со значением.Я пытался преобразовать значение и использовать 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|
+--------+-----------+

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вы пытались использовать col?

dataframe.withColumn("State", when(col("Efficiency") >= lit(minEfficiency), "ok").otherwise("not ok"))
0 голосов
/ 13 марта 2019

Вы также можете сделать что-то вроде ниже, используя 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|
+----------+------+     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...