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