Извлечение элементов из столбца списка - PullRequest
0 голосов
/ 11 июня 2018

У меня есть столбец, который представляет собой список списков ix, и другой столбец, который содержит списки users.Я хотел бы использовать ix в качестве индекса для users.Ниже показан небольшой пример.

 l = [('store1', [[0, 1], [2, 3]], [1001, 1002, 1003, 1004, 1005, 1006])]
 df = sqlContext.createDataFrame(l,('store','ix','users'))

+------+--------------------+--------------------+
| store|                  ix|               users|
+------+--------------------+--------------------+
|store1|[WrappedArray(0, ...|[1001, 1002, 1003...|
+------+--------------------+--------------------+

Я бы хотел, чтобы результат был

want =  [('store1', [[0, 1], [2, 3]], [1001, 1002, 1003, 1004, 1005, 1006], [[1001,1002],[1003,1004]])]
want = sqlContext.createDataFrame(want,('store','ix','users','new_col'))

Это почти как если бы я сделал users[ix].

Что такоелучший способ сделать это?

1 Ответ

0 голосов
/ 11 июня 2018

Я думаю, вы должны сделать это с помощью udf.

from pyspark.sql import functions as F
from pyspark.sql.types import ArrayType, IntegerType

def get_users_from_ix(ixs_array, users):
    output_array = []
    for ixs in ixs_array:
        output = []
        for ix in ixs:
            output.append(users[ix])
        output_array.append(output)
    return output_array

get_users_from_idx_udf = F.udf(get_users_from_idx, ArrayType(ArrayType(IntegerType())))

df_result = df.select('*', get_users_from_idx_udf(F.col('ix'), F.col('users')))

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...