【问题标题】:Creating a column if a condition is proven to be true如果条件被证明为真,则创建列
【发布时间】:2021-05-29 02:46:12
【问题描述】:

如果另一列包含某个子字符串,我想创建一个名为“quelle”的列,并用 lit("XY") 填充。我写的代码是这样的:

df => df.withColumn("quelle", when(substring_of_other_column.contains("123"), lit("XY")))

但我得到了错误: 类型不匹配:必填列,找到布尔值。

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 什么是element_quelle?
  • @mck 它是另一列的子字符串。我编辑了它
  • substring_of_other_column 的类型是什么?它是一列吗?一个字符串?
  • 这能回答你的问题吗? SPARK SQL - case when then
  • @mck 这是一个字符串

标签: sql scala apache-spark


【解决方案1】:

df.withColumn("quelle",when(col("id").contains("123"),lit("XY")).otherwise("AA")) 应该给你你正在寻找的结果

我试图重现您遇到的错误,这很可能是您尝试过的错误 df.withColumn("quelle",when("id".contains("123"),lit("XY")).otherwise("AA")) 这给了我与您遇到的完全相同的错误。

错误:类型不匹配; 发现:布尔 必需:org.apache.spark.sql.Column

请检查是否有帮助

【讨论】:

  • 兄弟,我们可以结婚吗,谢谢。现在可以了。你能解释一下问题是什么吗?我是 scala 菜鸟,所以很高兴知道 (:
  • 'when' 接受列作为参数,因此您必须包含 col("col_name") 或 $"col_name" 而不仅仅是 col_name -- def when(condition: org.apache.spark.sql .列,值:任意)
  • @marryTheEngineer,如果您是 scala 新手,在这种情况下做一些事情可能会有所帮助,scala 是强类型语言,类型必须匹配。尝试使用IntelliJ之类的IDE在你的代码上“ctrl+b”去寻找底层签名定义,它清楚地向你展示了函数参数类型的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2016-11-10
  • 2013-05-04
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多