Pyspark-使用startswith from list创建一个新列



根据字符串检查条件添加新列的最佳方法是什么

如果开始使用一些定义的值,则必须使用现有列值创建新列:

|deliveryname|department|state|salary|
+-------------+----------+-----+------+
|          LA|     Sales|   NY| 90000|
|      Austin|     Sales|   NY| 86000|
|      Robert|     Sales|   CA| 81000|
|     Snooze |   Finance|   CA| 90000|
|     MidWest|   Finance|   NY| 83000|
|        Jeff| Marketing|   CA| 80000|
df= df.withColumn("DeliveryPossible",when(df.deliveryname.startswith(s) for s in (('LO - ','Austin','MidWest','San Antonios', 'Snooze ea')),'True').otherwise('False'))

values = ['LO - ','Austin','MidWest','San Antonios', 'Snooze ea']
df.withColumn("DeliveryPossible",when(df.company_name.startswith(s) for s in values ,'True').otherwise('False')).show()

所需输出:

|deliveryname|department|state|salary|DeliveryPossible
+-------------+----------+-----+------+
|          LA|     Sales|   NY| 90000|False
|      Austin|     Sales|   NY| 86000|True
|      Robert|     Sales|   CA| 81000|False
|     Snooze |   Finance|   CA| 90000|True
|     MidWest|   Finance|   NY| 83000|True
|        Jeff| Marketing|   CA| 80000|False

我在两者中都得到了相同的错误,我想我漏掉了括号,但不知道该放在哪里。这样做正确吗?

Generator表达式如果不是唯一参数,则必须加括号。

感谢

df.startswith()只接受一个字符串作为其参数。您需要单独设置这些条件,并使用"OR"组合它们。

from functools import reduce
from operator import or_
values = ['LO - ','Austin','MidWest','San Antonios', 'Snooze ea']
df.withColumn("DeliveryPossible",
reduce(or_, [df.company_name.startswith(s) for s in values])
).show()

最新更新