如何从 Spark 的 DataFrame 中取出具体某一行?
根据阿里专家Spark的DataFrame不是真正的DataFrame-秦续业的文章-知乎的文章:
- DataFrame 应该有『保证顺序,行列对称』等规律
- 因此「Spark DataFrame 和 Koalas 不是真正的 DataFrame」
确实可以运行,但却看到一句话,大意是数据会被放到一个分区来执行,这正是因为数据本身之间并不保证顺序,因此只能把数据收集到一起,排序,再调用 shift。这样就不再是一个分布式的程序了,甚至比 pandas 本身更慢。
我们可以明确一个前提: Spark 中 DataFrame 是 RDD 的扩展,限于其分布式与弹性内存特性,我们没法直接进行类似 df.iloc(r, c)
的操作来取出其某一行。
但是现在我有个需求,分箱,具体来讲,需要『排序后遍历每一行及其邻居比如 i
与 i+j
』,因此,我们必须能够获取数据的某一行!
不知道有没有高手有好的方法?我只想到了以下几招!
1/3排序后select再collect
collect
是将 DataFrame 转换为数组放到内存中来。但是 Spark 处理的数据一般都