Spark 中 DataFrame 是 RDD 的扩展,限于其分布式与弹性内存特性,我们没法直接进行类似 df.iloc(r, c) 的操作来取出其某一行。

如何从 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 处理的数据一般都很大,直接转为数组,会爆内存。

因此不能直接 collect 。

要处理哪一列,就直接 select('列名') 取出这一列就好,再 collect 。我的数据有 2e5 * 2e4 这么多,因此 select 后只剩一列大小为 2e5 * 1 ,还是可以 collect 的。

这显然不是个好方法!因为无法处理真正的大数据,比如行很多时。

2/3排序后加index然后用SQL查找

给 DataFrame 实例 .sort("列名") 后,用 SQL 语句查找:

select 列名 from df_table where 索引列名 = i

我对于 SQL 不是很了解,因此这个做法只是在构思阶段。

此外,我不清楚 SQL 的性能!我要调用很多次 df.iloc[i, 列] ,那这样会不会太慢了?

3/3排序后加index然后转置查找列名

这个想法也只是停留在脑子里!因为会有些难度。

给每一行加索引列,从0开始计数,然后把矩阵转置,新的列名就用索引列来做。

之后再取第 i 个数,就 df(i.toString) 就行。

这个方法似乎靠谱。

附加方案:ml.feature.Bucketizer

import org.apache.spark.ml.feature.{Bucketizer, QuantileDiscretizer}

spark中 Bucketizer 的作用和我实现的需求差不多(尽管细节不同),我猜测其中也应该有相似逻辑。有能力和精力了应该去读读源码,看看官方怎么实现的。

从 Spark 的 DataFrame 中取出具体某一行详解相关推荐

  1. 【求助】如何从 Spark 的 DataFrame 中取出具体某一行?我自己的一些思考

    如何从 Spark 的 DataFrame 中取出具体某一行? 根据阿里专家Spark的DataFrame不是真正的DataFrame-秦续业的文章-知乎的文章: DataFrame 应该有『保证顺序 ...

  2. python explode_pandas dataframe 中的explode函数用法详解

    在使用 pandas 进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于 hive sql 中的 explode 函数. 这个函数如下: Code # !/usr/ ...

  3. 原创:Spark中GraphX图运算pregel详解

    原创:Spark中GraphX图运算pregel详解 由于本人文字表达能力不足,还是多多以代码形式表述,首先展示测试代码,然后解释: package com.txq.spark.test import ...

  4. python创建列向量_关于Numpy中的行向量和列向量详解

    关于Numpy中的行向量和列向量详解 行向量 方式1 import numpy as np b=np.array([1,2,3]).reshape((1,-1)) print(b,b.shape) 结 ...

  5. pythonpandas函数详解_对pandas中Series的map函数详解

    Series的map方法可以接受一个函数或含有映射关系的字典型对象. 使用map是一种实现元素级转换以及其他数据清理工作的便捷方式. (DataFrame中对应的是applymap()函数,当然Dat ...

  6. STM32(Cortex-M3)启动过程+IAR中xcl及icf文件详解

    一:STM32(Cortex-M3)启动过程(入口地址) ARM7和ARM9启动时从绝对地址0X00000000开始执行复位中断程序,即固定了复位后的起始地址,但中断向量表的位置是可变的. Corte ...

  7. 加载vue文件步骤_vue中.vue文件解析步骤详解

    这次给大家带来vue中.vue文件解析步骤详解,vue中.vue文件解析的注意事项有哪些,下面就是实战案例,一起来看一下. 我们平时写的 .vue 文件称为 SFC(Single File Compo ...

  8. iOS中的HotFix方案总结详解

    iOS中的HotFix方案总结详解 相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dy ...

  9. 在oracle中游标的操作,Oracle中的游标和函数详解

    Oracle中的游标和函数详解 1.游标 游标是一种 PL/SQL 控制结构:可以对 SQL 语句的处理进行显示控制,便于对表的行数据 逐条进行处理. 游标并不是一个数据库对象,只是存留在内存中. 操 ...

最新文章

  1. pip install 豆瓣源、清华源、阿里源、中国科技大学源
  2. 小程序首页获取数据给数组赋值,实现加载更多,以及遇到的坑
  3. NYOJ 108 士兵杀敌(一)
  4. 【Java作业】实验二 货物进销管理系统(运行成功完整代码
  5. sqlserver 还原到时间点
  6. php 小知识随手记 new self() 和new static()作用和区别
  7. linux 性能调优
  8. flume流程之SpoolDir-memory-hdfs
  9. 视频:Microsoft PDC 09,算法及数据结构内容及其他
  10. Java实现批量ping IP地址
  11. app软件测试的意义,APP测试用例的作用是什么
  12. 三种中介效应检验方法及操作步骤
  13. OKI系列针式打印机更换色带图解教程
  14. php fpm 504,php进程超时接口返回504错误分析
  15. 爬取豆瓣电影排行榜top250最新教程!经典爬虫案例
  16. 为什么苹果蓝牙耳机连上还是公放_史上最好用的蓝牙无线耳机?苹果AirPods神奇在哪里!...
  17. 小程序rich-text中实现图片预览
  18. 一个描述二氧化硅的两体势能BKS
  19. javafx 教程_何时使用JavaFX代替HTML
  20. java 幽灵引用_全面解析Java中的GC与幽灵引用

热门文章

  1. java data是什么文件_如何用java实现 读取一个data类型文件 并显示出来(随便选择一种类型txt或者word)...
  2. datatable如何生成级联数据_通过源码分析Mybatis是如何返回数据库生成的自增主键值?...
  3. 如何优化MySQL千万级大表
  4. 消息队列之RabbitMQ
  5. 常用的MySQL图形化管理软件
  6. laravel excel迁移到lumen
  7. s5-14 链路状态路由选择
  8. 7.7-9 chage、chpasswd、su
  9. 3 当某个应用的CPU使用达到100%,该怎么办?
  10. Nginx动静分离-tomcat