我在PySpark中有一个函数,它接受两个输入并返回两个输出:
def get_seen_cards(x, y):
if 1 in x:
alreadyFailed = 1
else:
alreadyFailed = 0
if y:
alreadyAuthorized = 1
else:
alreadyAuthorized = 0
return alreadyFailed, alreadyAuthorized
我想将此功能与udf一起使用,以使整个数据帧都像这样处理:
get_seen_cards_udf = udf(lambda x, y : get_seen_cards_spark(x, y), IntegerType())
data.withColumn(["alr_failed", "alr_auth"], get_seen_cards_udf(data["card_uid"], data["failed"]))
data["card_uid"]
如下所示:
[Row(card_uid='card_1'),
Row(card_uid='card_2'),
Row(card_uid='card_3'),
Row(card_uid='card_4'),
Row(card_uid='card_5')]
和data["failed"]
看起来像这样:
[Row(failed=False),
Row(failed=False),
Row(failed=False),
Row(failed=True),
Row(failed=False)]
但这是不可行的,因为 withColumn 仅适用于一个列。
我需要在数据框中同时添加两列,第一列是该函数第一次返回的结果,并将存储在“ alr_failed
”中,另一列是该值的第二个值返回值,并将其存储在“ alr_auth
”中。
想法是在处理后返回带有以下列的数据框:
card_uid, failed, alr_failed, alr_auth
有可能吗?还是有解决方法?