pyspark数据框何时和多个else子句

时间:2019-03-25 20:08:49

标签: pyspark apache-spark-sql pyspark-sql

我需要在pyspark数据框中创建if if else else。

我有两列要进行逻辑测试。

逻辑如下:

  1. 如果列A或列B包含“某物”,则输入“ X”
  2. 如果(列A的字符串中的数值+列B的字符串中的数值)> 100,则输入“ X”
  3. 如果(列A的字符串中的数值+列B的字符串中的数值)> 50,则输入“ Y”
  4. 如果(列A的字符串中的数值+列B的字符串中的数值)> 0,则写“ Z”
  5. 否则,然后输入“ T”

到新列“ RESULT”

我认为最快的搜索方法是何时,否则,否则,否则在以下查询中失败。

如果您建议使用更快的方法,将不胜感激。

注意:when(clause).when(clause).when(clause).when(clause).otherwise(clause)一次又一次地搜索整个表。我只想处理不匹配的数据。

df = df.withColumn('RESULT', F.when(\
F.when((F.col("A").like("%something%") | F.col("B").like("%something%")), "X").otherwise(\
F.when((((F.regexp_extract(F.col("A"), ".(\d+).", 1)) + F.regexp_extract(F.col("B"), ".(\d+).", 1)) > 100), "X").otherwise(\
F.when((((F.regexp_extract(F.col("A"), ".(\d+).", 1)) + F.regexp_extract(F.col("B"), ".(\d+).", 1)) > 29), "Y").otherwise(\
F.when((((F.regexp_extract(F.col("A"), ".(\d+).", 1)) + F.regexp_extract(F.col("B"), ".(\d+).", 1)) > 0), "Z").otherwise(\
"T"))))))

Desired Output

1 个答案:

答案 0 :(得分:0)

反正我有解决办法。

df = df.withColumn('RESULT',\
F.when((F.col("A").like("%something%") | F.col("B").like("%something%")), "X").otherwise(\
F.when((((F.regexp_extract(F.col("A"), ".(\d+).", 1)) + F.regexp_extract(F.col("B"), ".(\d+).", 1)) > 100), "X").otherwise(\
F.when((((F.regexp_extract(F.col("A"), ".(\d+).", 1)) + F.regexp_extract(F.col("B"), ".(\d+).", 1)) > 29), "Y").otherwise(\
F.when((((F.regexp_extract(F.col("A"), ".(\d+).", 1)) + F.regexp_extract(F.col("B"), ".(\d+).", 1)) > 0), "Z").otherwise(\
"T")))))