Scala 如何在when-then函数中使用spark-sql字符串函数

Scala 如何在when-then函数中使用spark-sql字符串函数,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,如果文本列有英文文本,我想更改语言列的值,因此我使用when-then函数,但它无法计算ascii spark字符串函数 import org.apache.spark.sql.functions._ val newdf = df.withColumn("asc", ascii("text")) .withColumn("language", when(col("asc") > 0, "en") .otherwise(col("hi"))) 甚至试过 va

如果文本列有英文文本,我想更改语言列的值,因此我使用when-then函数,但它无法计算ascii spark字符串函数

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

    val newdf = df.withColumn("language", when(ascii(col("asc")) > 0, "en")
          .otherwise(col("hi")))
函数“ascii”参数必须为列(非字符串),并且必须在“否则”字符串中指定:

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

在您的代码中,问题是您在少数地方混合了列名和列。以下代码将给出正确的结果:

 df.withColumn("language", when(ascii(col("text")) > 0, "en").otherwise("hi"))

pasha701答案的区别是什么?区别是您不需要创建新列“asc”。如何访问ascii(col(“text[0]”)中数组的第一个元素)?@很高兴您可以分解数组以创建新列并将其传递给ascii函数。