【问题标题】:Convert two columns based on the condition of string column and other columns 2 & 3 Pyspark UDF根据字符串列和其他列 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? 并希望保留所有其他值。

谢谢

【问题讨论】:

标签: pyspark user-defined-functions multiple-conditions


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2018-08-01
  • 2023-02-07
  • 2021-08-30
  • 1970-01-01
  • 2023-01-30
  • 2023-03-27
  • 1970-01-01
  • 2020-05-29
相关资源
最近更新 更多