【问题标题】:How can I use multiple .contains() inside a .when() in pySpark? [duplicate]如何在 pySpark 的 .when() 中使用多个 .contains()? [复制]
【发布时间】:2020-03-03 20:58:25
【问题描述】:

我正在尝试根据另一列中的现有单词在新列中创建类。为此,我需要包含多个 .contains() 条件。但是我尝试过的一个都没有工作。

def classes_creation(data):
    df = data.withColumn("classes", when(data.where(F.col("MISP_RFW_Title").like('galleys') | F.col("MISP_RFW_Title").like('coffee')),"galleys") ).otherwise(lit(na))
    return df
# RETURNS ERROR
def classes_creation(data):
     df = data.withColumn("classes", when(col("MISP_RFW_Title").contains("galleys").contains("word"), 'galleys').otherwise(lit(na))
     return df
# RETURNS COLUMN OF NA ONLY
def classes_creation(data):
     df = data.withColumn("classes", when(col("MISP_RFW_Title").contains("galleys" | "word"), 'galleys').otherwise(lit(na))
     return df
# RETURNS COLUMN OF NA ONLY

【问题讨论】:

  • 不起作用,因为我需要包含条件或类似条件。他们使用运算符,例如 == 或 。

标签: python pyspark


【解决方案1】:

如果我正确理解了您的要求,您可以使用正则表达式匹配rlike

data.withColumn("classes", when(col("MISP_RFW_Title").rlike("galleys|word"), 'galleys').otherwise('a'))

或者如果你有不同的列,你可以使用这样的东西

data.withColumn("classes", when((col("MISP_RFW_Title").contains("galleys")|col("MISP_RFW_Title").contains("word")), 'galleys').otherwise('a'))

【讨论】:

  • 在实现您的代码时出现以下错误:in when raise TypeError("condition should be a Column") TypeError: condition should be a Column
  • @J.Perez 对我来说很好用。你使用的 Spark 版本是什么?你能分享一些数据吗?
猜你喜欢
  • 2017-04-20
  • 2019-07-15
  • 2021-12-03
  • 2017-06-23
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 2022-07-05
相关资源
最近更新 更多