带有udf的多个列上的PySpark WithColumn

时间:2019-01-04 09:48:36

标签: python-3.x apache-spark pyspark

我在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

有可能吗?还是有解决方法?

0 个答案:

没有答案