pyspark:根据另一列中包含的字符串创建列

pyspark:根据另一列中包含的字符串创建列,pyspark,Pyspark,如何通过使用Pyspark提取特定字符串来减少列中的噪声。请检查下表。除了只有两个类别之外,额外的文本(持续时间)会破坏任何分组。下面的UDF创建的列duration1应该可以解决这个问题,但是缺少像“value.contains()”、“like”或“in”这样的运算符 持续时间|持续时间1 | 全天|全天| 全天x |其他| 半天|半天| 半天上午|其他| def duration_simple(value): if value == "Full day": return 'Ful

如何通过使用Pyspark提取特定字符串来减少列中的噪声。请检查下表。除了只有两个类别之外,额外的文本(持续时间)会破坏任何分组。下面的UDF创建的列duration1应该可以解决这个问题,但是缺少像“value.contains()”、“like”或“in”这样的运算符

持续时间|持续时间1 |
全天|全天|
全天x |其他|
半天|半天|
半天上午|其他|

def duration_simple(value):
   if   value == "Full day": return 'Full day'
   elif value == "Half-day": return 'Half day'
   else: return 'other'

udfduration_simple = udf(duration_simple, StringType())

new_df= old_df.withColumn("duration1", udfduration_simple("duration"))
您可以使用like()函数,类似于SQL

from pyspark.sql import functions as F
new_df= df.select( df.duration, F.when(df.duration.like("%Full day%"),"Full day").when(df.duration.like("%Half-day%"),"Half day").otherwise("other").alias("duration1")).show()

为什么要使用UDF?为什么不简单地使用case语句(sparksql)