首页 > 解决方案 > 如何根据pyspark列表中的值获取索引

问题描述

我有一个如下列表

[[[Row(cola=53273831, colb=1197), Row(cola=15245438, colb=1198)], [Row(cola=53273831, colb=1198)]]]

在这里,我想搜索特定元素并获取它的索引值。前任:

mylist.index((([['53273831', '1198']])))


应该给我索引为1。但我收到错误

ValueError: [['53273831', '1198']] is not in list.

这是我正在使用的代码

df2=df.groupBy("order").agg(collect_list(struct(["id","node_id"])).alias("res"))
newrdd = df2.rdd.map(lambda x : (x))
order_info = newrdd.collectAsMap()
dict_values=(list(order_info.values()))
dict_keys=(list(order_info.keys()))
a=[[53273831, 1198]]
k2= dict_keys[dict_values.index(((a)))]  # This line is givin

给我错误:ValueError:[['53273831','1198']]不在列表中

order_info 字典看起来像这样 {10160700: [Row(id=53273831, node_id=1197), Row(id=15245438, node_id=1198)], 101600201: [Row(iid=53273831, node_id=1198)]}

你能帮我从这个结构类型列表中获取索引值吗?

标签: apache-sparkpysparkapache-spark-sql

解决方案


元素是 Row 对象,而不是列表,因此需要指定 Row 对象。您还应该从 mylist[0] 获取索引,因为 mylist 是一个多层数组。

from pyspark.sql import Row

mylist = [[[Row(cola=53273831, colb=1197), Row(cola=15245438, colb=1198)], [Row(cola=53273831, colb=1198)]]]

id = mylist[0].index([Row(cola=53273831, colb=1198)])

会给你一个 1 的 id。


推荐阅读