假设我有一个Spark DataFrame,如下所示。如何获得value
为0的行索引?
ID | value
-------------
001 | 1
002 | 0
003 | 2
004 | 0
005 | 1
我想要的行索引是2和4。
答案 0 :(得分:3)
您可以使用filter
和select
来获取所需的索引
将dataframe
视为
+---+-----+
|ID |value|
+---+-----+
|001|1 |
|002|0 |
|003|2 |
|004|0 |
|005|1 |
+---+-----+
您可以执行以下操作
df.filter(df.value == 0).select(df.ID)
应该给你
+---+
|ID |
+---+
|002|
|004|
+---+
您可以使用.flatMap(lambda x: x).collect()
将上面选定的列dataframe
转换为list
我希望答案很有帮助
答案 1 :(得分:0)
Spark DataFrame
中没有索引这样的东西。与SQL表相同,DataFrame
是无序的,除非专门排序。
有一个row_number
窗口函数,但不适用于全局排序。
总的来说,如果你考虑订单,你可能会从错误的方向接近Spark。
答案 2 :(得分:0)
你有办法做到这一点,我在想rdd.zipwithindex()和过滤。但为什么你需要这样做?通常不鼓励尝试使用行索引 - 您尝试使用这些索引实现的最终目标是什么?可能有更好的方法来做到这一点。
答案 3 :(得分:-1)
val index = ss.sparkContext
.parallelize(Seq((1,1), (2,0), (3,2), (4,0), (5,1)))
.toDF("ID", "value")
index.where($"value" === 0).select("ID").show()