Вложенный регистр в scala - PullRequest
       3

Вложенный регистр в scala

0 голосов
/ 01 апреля 2020

Я очень плохо знаком с scala и мне нужно написать что-то вроде дела, которое я не понимаю, чтобы получить правильную вещь:

Например, мне нужно преобразовать приведенное ниже

 CASE WHEN ( IS-NULL (Number, 0)) > 0

THEN IS-NULL( (ROUND(number / ((100/number)+1),2) * number), 0 )

ELSE 0 END AS Number_Ratio

И я пробовал это:

- СОЗДАТЬ КАДР ДАННЫХ

val someDF = Seq(
  (8, "bat"),
  (64, "mouse"),
  (0,   "abc")
).toDF("number", "word")

- ЗАЯВЛЕНИЕ О СЛУЧАЕ

someDF.select("*").withColumn("NUMBER_RATIO",when (when($"number".isNull,lit(0))>0, when(ROUND($"number" / ((100/$"number"))+1),2* $"number")).isNull,0).otherwise(lit(0)).show()

В котором я получаю ошибку :

<console>:26: error: too many arguments for method withColumn: (colName: String, col: org.apache.spark.sql.Column)org.apache.spark.sql.DataFrame

Cananyone, пожалуйста, помогите мне, что я делаю не так

1 Ответ

0 голосов
/ 01 апреля 2020

Я дам вам несколько советов, вы достаточно близки по своему усмотрению:)

  1. IS-NULL(number, 0) более читабельно для ввода Spark как coalesce($"number", lit(0))
  2. ROUND(number, 2) можно выразить как pround($"number", 2) - это то, что вы ошиблись
  3. CASE WHEN (condition) THEN (then_clause) ELSE (else_clause) это when(condition, then_clause).otherwise(else_clause)

Если у вас есть больше вопросы, не стесняйтесь задавать в комментариях. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...