spark-sql将Rdd转换为DataFrame进行操作的两种方法
SparkConf sparkConf = new SparkConf()
.setMaster("local").setAppName("ClzMap"); JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf); JavaRDD<String> line_str = javaSparkContext.textFile("C:\\Users\\Administrator\\Desktop\\stud.txt"); JavaRDD<KK> line_kk = line_str.map(new Function<String, KK>() {
@Override
public KK call(String s) throws Exception {
String attr[] = s.split(",");
KK k = new KK();
k.setName(attr[0]);
k.setAge(Integer.parseInt(attr[1]));
k.setYear(attr[2]);
return k;
}
}); SQLContext sqlContext = new SQLContext(javaSparkContext); DataFrame df = sqlContext.createDataFrame(line_kk, KK.class);//反射的方式 //在这理由两种方法进行数据过滤(1:使用DataFrame的javaApi,2:使用临时表的sql查询方式) //-------------------------第1种-----------------------
DataFrame df_filter = df.filter(df.col("age").geq(19));
//-------------------------end----------------------- //-------------------------第2种-----------------------
DataFrame df_filter1 = df.filter(df.col("age").geq(19));
df_filter1.registerTempTable("KK");//创建一个临时表,参数为表名
sqlContext.sql("select * from KK where age>=19");
//-------------------------end----------------------- JavaRDD<Row> df_row = df_filter1.javaRDD();//将DataFrame转化成RDD JavaRDD<KK> df_kk = df_row.map(new Function<Row, KK>() {
@Override
public KK call(Row row) throws Exception {//row的顺序和原来的文件输入可能有不同
KK k = new KK();
k.setAge(row.getInt(0));
k.setName(row.getString(1));
k.setYear(row.getString(2));
return k;
}
}); df_kk.foreach(new VoidFunction<KK>() {
@Override
public void call(KK kk) throws Exception {
System.out.println("getAge->" + kk.getAge());
System.out.println("getYear->" + kk.getYear());
System.out.println("getName->" + kk.getName());
System.out.println("=============");
}
});
文本文件的内容:
由上述代码可以看出,KK是一个实体类型并且可序列化(Serializable)!
zzq,19,2016
yyu,18,2016
uui,90,2015 ps:如果在运行期才能确定类型,则需要使用StructType动态构建类型,代码如下:
//构建一个动态类型
List<StructField> structFieldList = new ArrayList<StructField>();
structFieldList.add(DataTypes.createStructField("name", DataTypes.StringType, true));//第三个参数决定这个属性是否可以为null
structFieldList.add(DataTypes.createStructField("age", DataTypes.IntegerType, true));
structFieldList.add(DataTypes.createStructField("year", DataTypes.StringType, true));
StructType structType = DataTypes.createStructType(structFieldList); SQLContext sqlContext = new SQLContext(javaSparkContext); DataFrame df = sqlContext.createDataFrame(line_row, structType);
spark-sql将Rdd转换为DataFrame进行操作的两种方法的更多相关文章
- Spark SQL中列转行(UNPIVOT)的两种方法
行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...
- elf格式转换为hex格式文件的两种方法
这周工作终于不太忙了,可以写点笔记总结一下了. 之前的文章如何在Keil-MDK开发环境生成Bin格式文件,介绍了如何在Keil开发环境使用fromelf软件,将生成的axf文件转换为bin文件,这次 ...
- 安卓ListView操作的两种方法
举例做一个微信的中间部分(好友消息等信息通知) 第一种:BaseAdapter() package com.example.wx; import java.util.ArrayList;import ...
- WCF 客户端调用服务操作的两种方法
本节的主要内容:1.通过代理类的方式调用服务操作.2.通过通道的方式调用服务操作.3.代码下载 一.通过代理类的方式调用服务操作(两种方式添加代理类) 1.手动编写代理类,如下: 客户端契约: usi ...
- Spark SQL 之 RDD、DataFrame 和 Dataset 如何选择
引言 Apache Spark 2.2 以及以上版本提供的三种 API - RDD.DataFrame 和 Dataset,它们都可以实现很多相同的数据处理,它们之间的性能差异如何,在什么情况下该选用 ...
- PDF怎么转换为CAD文件?这两种方法你的会
在日常的办公中,我们最常见的文件格式就是PDF格式的,因为PDF文件的安全性是比较高的,可以防止不小心触碰到键盘修改文件内容,而且PDF文件便于进行文件的传输.但是有时候也需要将PDF转换成CAD,那 ...
- spark SQL、RDD、Dataframe总结
- SQL:大表多表更新的两种方法
#标记不参与计算的明细(跨平台的或is_end=2)#跨平台订单:暂不处理 说明:大表即order_list_wx,几十万,需要根据小表(order_list_zfb ,几万)来做更新,查出两个平台都 ...
- Spark提高篇——RDD/DataSet/DataFrame(二)
该部分分为两篇,分别介绍RDD与Dataset/DataFrame: 一.RDD 二.DataSet/DataFrame 该篇主要介绍DataSet与DataFrame. 一.生成DataFrame ...
随机推荐
- 【转】Java并发的AQS原理详解
申明:此篇文章转载自:https://juejin.im/post/5c11d6376fb9a049e82b6253写的真的很棒,感谢老钱的分享. 打通 Java 任督二脉 —— 并发数据结构的基石 ...
- python和C++联合调试
python可以利用SO的方式去调用C++中的函数,但是需要一种调试方案来进行python和C++的联合调试,效果是直接在c++代码中打断点,然后python在进行c++so调用的时候,直接进入到断点 ...
- 基于jQuery 3D旋转明星人物展示特效
分享一款基于jQuery 3D旋转明星人物展示特效.这是一款来自百度换肤活动的明星旋转展示效果.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=&quo ...
- java语言的优缺点
转载自:https://blog.csdn.net/bingshanyijiao_fkx/article/details/51613954 角度一: 优点:简单.安全.稳定.跨平台 缺点:需要运行环境 ...
- .NET EntityFrameworkCore.DbUpdateException 错误
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See t ...
- 阿里云ECS服务器无法上传文件的解决方案
1.安装软件启动FTP服务 yum install vsftpd # 安装service vsftpd start # 启动服务chkconfig vsftpd on # 开机启动 2.防火墙ipta ...
- Kubernetes集群部署之五node节点部署
Node节点是Kubernetes集群中的工作负载节点.每个node都会被master分配一些工作负载,每个node节点都运行以下关键服务进程.Kubelet :负责pod对应的容器的创建.启停等任务 ...
- AES和RSA加解密的Python用法
AES AES 是一种对称加密算法,用key对一段text加密,则用同一个key对密文解密, from Crypto import Random from Crypto.Hash import SHA ...
- Zephyr学习(三)启动过程
一.写在前面 最近对zephyr这个系统很感兴趣,因此业余有时间的时候都在研究它的源码,而光看代码不去动手这不是我的风格,于是乎在网上淘了一块STM32F103C8T6的核心板和一块NRF52832的 ...
- 2018年总结&2019年计划
今天加了来自博客园的好友,才意识到博客已经荒废了许久.其实自己最近也是考虑了总结一下这个繁忙的2018. 2019计划: . 多给家里通电话: . 关心照顾好小奶糖: . 多读书,非小说: . 坚持吃 ...