Pyspark 从列表列中提取元素

Pyspark 从列表列中提取元素,pyspark,Pyspark,我有一列是列表ix,另一列是列表用户。我想使用ix作为用户的索引。下面是一个小例子 l = [('store1', [[0, 1], [2, 3]], [1001, 1002, 1003, 1004, 1005, 1006])] df = sqlContext.createDataFrame(l,('store','ix','users')) +------+--------------------+--------------------+ | store|

我有一列是列表
ix
,另一列是列表
用户
。我想使用
ix
作为
用户的索引。下面是一个小例子

 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]
,那就差不多了


实现这一点的最佳方法是什么?

我认为您必须使用udf

从pyspark.sql导入函数为F
从pyspark.sql.types导入ArrayType、IntegerType
def从_ix获取_用户(ixs_阵列,用户):
输出_数组=[]
对于ixs_阵列中的ixs:
输出=[]
对于ix中的ix:
output.append(用户[ix])
输出\数组.追加(输出)
返回输出数组
get_users_from_idx_udf=F.udf(get_users_from_idx,ArrayType(IntegerType()))
df_result=df.select('*',get_users_from_idx_udf(F.col('ix'),F.col('users'))
这应该行得通