根据字符串列和其他列 2 & 3 Pyspark UDF 的条件转换两列
Posted
技术标签:
【中文标题】根据字符串列和其他列 2 & 3 Pyspark UDF 的条件转换两列【英文标题】:Convert two columns based on the condition of string column and other columns 2 & 3 Pyspark UDF 【发布时间】:2020-04-22 03:16:16 【问题描述】:你好
我想使用公式 (cm/100) 将一些 cm 值(ref_low = 20 和 ref_low 70 和 ref_high
c_udf = udf(lambda val: val/100 if ref_low = 20 and ref_low
问题 1:如何将 unit = Cm 添加到 UDF? 并希望保留所有其他值。
谢谢
【问题讨论】:
这里不需要udf
。您可以使用when/otherwise
子句来表达您的逻辑
Please don't post images of code/data (or links to them) 也提供minimal, complete, and verifiable example 并相应地修改您的问题
【参考方案1】:
我想这就是你想要的。 Spark 内置 when/otherwise
就足够了。你只需要适当地表达布尔值。
from pyspark.sql import functions as F
df.withColumn("ref_low", F.when((F.col("unit")=='cm')&((F.col("ref_low")<40)|\
(F.col("ref_low")==20)), F.col("ref_low")/100)\
.otherwise(F.col("ref_low")))\
.withColumn("ref_high", F.when((F.col("unit")=='cm')&((F.col("ref_high")<90)&\
(F.col("ref_high")>70)),F.col("ref_high")/100)\
.otherwise(F.col("ref_high"))).show()
#+-----+-------+--------+
#| unit|ref_low|ref_high|
#+-----+-------+--------+
#| cm| 0.3| 50.0|
#| cm| 40.0| 70.0|
#| cm| 0.2| 0.85|
#| cm| 0.2| 0.85|
#| cm| 0.3| 0.76|
#| cm| 43.0| 65.0|
#|Meter| 0.2| 0.65|
#|Meter| 0.4| 0.68|
#|Meter| 0.5| 0.8|
#+-----+-------+--------+
【讨论】:
谢谢你,@Mohammad Murtaza Hashmi以上是关于根据字符串列和其他列 2 & 3 Pyspark UDF 的条件转换两列的主要内容,如果未能解决你的问题,请参考以下文章