Как использовать строковую функцию spark sql в функции then - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу изменить значение языкового столбца, если в текстовом столбце есть engli sh text. Поэтому я использую функцию when-then, но она не может оценить функцию искровой строки ascii

import org.apache.spark.sql.functions._
val newdf = df.withColumn("asc", ascii("text"))
      .withColumn("language", when(col("asc") > 0, "en")
      .otherwise(col("hi")))

Even пробовал

    val newdf = df.withColumn("language", when(ascii(col("asc")) > 0, "en")
          .otherwise(col("hi")))

Ответы [ 2 ]

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

В вашем коде проблема в том, что вы смешиваете имя столбца и столбец в нескольких местах. Ниже код даст правильный результат:

 df.withColumn("language", when(ascii(col("text")) > 0, "en").otherwise("hi"))
0 голосов
/ 22 апреля 2020

Параметр функции "ascii" должен быть столбцом (не строкой), а в строке "иначе" должен быть указан:

val newdf = df.withColumn("asc", ascii($"text"))
  .withColumn("language", when(col("asc") > 0, "en")
    .otherwise("hi"))
...