从 Spark 的 DataFrame 中取出具体某一行详解
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 中取出具体某一行详解相关推荐
- 【求助】如何从 Spark 的 DataFrame 中取出具体某一行?我自己的一些思考
如何从 Spark 的 DataFrame 中取出具体某一行? 根据阿里专家Spark的DataFrame不是真正的DataFrame-秦续业的文章-知乎的文章: DataFrame 应该有『保证顺序 ...
- python explode_pandas dataframe 中的explode函数用法详解
在使用 pandas 进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于 hive sql 中的 explode 函数. 这个函数如下: Code # !/usr/ ...
- 原创:Spark中GraphX图运算pregel详解
原创:Spark中GraphX图运算pregel详解 由于本人文字表达能力不足,还是多多以代码形式表述,首先展示测试代码,然后解释: package com.txq.spark.test import ...
- python创建列向量_关于Numpy中的行向量和列向量详解
关于Numpy中的行向量和列向量详解 行向量 方式1 import numpy as np b=np.array([1,2,3]).reshape((1,-1)) print(b,b.shape) 结 ...
- pythonpandas函数详解_对pandas中Series的map函数详解
Series的map方法可以接受一个函数或含有映射关系的字典型对象. 使用map是一种实现元素级转换以及其他数据清理工作的便捷方式. (DataFrame中对应的是applymap()函数,当然Dat ...
- STM32(Cortex-M3)启动过程+IAR中xcl及icf文件详解
一:STM32(Cortex-M3)启动过程(入口地址) ARM7和ARM9启动时从绝对地址0X00000000开始执行复位中断程序,即固定了复位后的起始地址,但中断向量表的位置是可变的. Corte ...
- 加载vue文件步骤_vue中.vue文件解析步骤详解
这次给大家带来vue中.vue文件解析步骤详解,vue中.vue文件解析的注意事项有哪些,下面就是实战案例,一起来看一下. 我们平时写的 .vue 文件称为 SFC(Single File Compo ...
- iOS中的HotFix方案总结详解
iOS中的HotFix方案总结详解 相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dy ...
- 在oracle中游标的操作,Oracle中的游标和函数详解
Oracle中的游标和函数详解 1.游标 游标是一种 PL/SQL 控制结构:可以对 SQL 语句的处理进行显示控制,便于对表的行数据 逐条进行处理. 游标并不是一个数据库对象,只是存留在内存中. 操 ...
最新文章
- pip install 豆瓣源、清华源、阿里源、中国科技大学源
- 小程序首页获取数据给数组赋值,实现加载更多,以及遇到的坑
- NYOJ 108 士兵杀敌(一)
- 【Java作业】实验二 货物进销管理系统(运行成功完整代码
- sqlserver 还原到时间点
- php 小知识随手记 new self() 和new static()作用和区别
- linux 性能调优
- flume流程之SpoolDir-memory-hdfs
- 视频:Microsoft PDC 09,算法及数据结构内容及其他
- Java实现批量ping IP地址
- app软件测试的意义,APP测试用例的作用是什么
- 三种中介效应检验方法及操作步骤
- OKI系列针式打印机更换色带图解教程
- php fpm 504,php进程超时接口返回504错误分析
- 爬取豆瓣电影排行榜top250最新教程!经典爬虫案例
- 为什么苹果蓝牙耳机连上还是公放_史上最好用的蓝牙无线耳机?苹果AirPods神奇在哪里!...
- 小程序rich-text中实现图片预览
- 一个描述二氧化硅的两体势能BKS
- javafx 教程_何时使用JavaFX代替HTML
- java 幽灵引用_全面解析Java中的GC与幽灵引用
热门文章
- java data是什么文件_如何用java实现 读取一个data类型文件 并显示出来(随便选择一种类型txt或者word)...
- datatable如何生成级联数据_通过源码分析Mybatis是如何返回数据库生成的自增主键值?...
- 如何优化MySQL千万级大表
- 消息队列之RabbitMQ
- 常用的MySQL图形化管理软件
- laravel excel迁移到lumen
- s5-14 链路状态路由选择
- 7.7-9 chage、chpasswd、su
- 3 当某个应用的CPU使用达到100%,该怎么办?
- Nginx动静分离-tomcat