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进行操作的两种方法的更多相关文章

  1. Spark SQL中列转行(UNPIVOT)的两种方法

    行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...

  2. elf格式转换为hex格式文件的两种方法

    这周工作终于不太忙了,可以写点笔记总结一下了. 之前的文章如何在Keil-MDK开发环境生成Bin格式文件,介绍了如何在Keil开发环境使用fromelf软件,将生成的axf文件转换为bin文件,这次 ...

  3. 安卓ListView操作的两种方法

    举例做一个微信的中间部分(好友消息等信息通知) 第一种:BaseAdapter() package com.example.wx; import java.util.ArrayList;import ...

  4. WCF 客户端调用服务操作的两种方法

    本节的主要内容:1.通过代理类的方式调用服务操作.2.通过通道的方式调用服务操作.3.代码下载 一.通过代理类的方式调用服务操作(两种方式添加代理类) 1.手动编写代理类,如下: 客户端契约: usi ...

  5. Spark SQL 之 RDD、DataFrame 和 Dataset 如何选择

    引言 Apache Spark 2.2 以及以上版本提供的三种 API - RDD.DataFrame 和 Dataset,它们都可以实现很多相同的数据处理,它们之间的性能差异如何,在什么情况下该选用 ...

  6. PDF怎么转换为CAD文件?这两种方法你的会

    在日常的办公中,我们最常见的文件格式就是PDF格式的,因为PDF文件的安全性是比较高的,可以防止不小心触碰到键盘修改文件内容,而且PDF文件便于进行文件的传输.但是有时候也需要将PDF转换成CAD,那 ...

  7. spark SQL、RDD、Dataframe总结

  8. SQL:大表多表更新的两种方法

    #标记不参与计算的明细(跨平台的或is_end=2)#跨平台订单:暂不处理 说明:大表即order_list_wx,几十万,需要根据小表(order_list_zfb ,几万)来做更新,查出两个平台都 ...

  9. Spark提高篇——RDD/DataSet/DataFrame(二)

    该部分分为两篇,分别介绍RDD与Dataset/DataFrame: 一.RDD 二.DataSet/DataFrame 该篇主要介绍DataSet与DataFrame. 一.生成DataFrame ...

随机推荐

  1. Effective Java 第三版——88. 防御性地编写READOBJECT方法

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  2. Windows下安装模块mysqlclient报错处理

    Windows环境下使用pip命令安装Python模块mysqlclientpip install mysqlclient安装过程报错  [error] Microsoft Visual C++ 14 ...

  3. Python(字符编码)

    https://www.cnblogs.com/zihe/p/6993891.html 一 了解字符编码的知识储备 1. 文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开 ...

  4. MySQL 4 种隔离级别的区别

    ## 测试环境 mysql> select version(); +------------+ | version() | +------------+ -log | +------------ ...

  5. iOS10.3 起,将支持应用内评分

    iOS10.3 起,将支持应用内评分. (2017-01-25,现在最高版本iOS10.2.1,Xcode 稳定版本Xcode8.2.1,Xcode Beta版本 Xcode8.3Beta(BW109 ...

  6. 《FPGA全程进阶---实战演练》之搞定阻抗匹配

    笔者最近几天在做视频采集板卡时,视频显示端打算采用 USB2.0接口+上位机 显示,其中USB需要做阻抗匹配.通常情况下USB的阻抗值需要做到90Ω±10%.下面就讲解一下关于阻抗匹配的知识,哪里说得 ...

  7. 牛客网_Go语言相关练习_判断&选择题(6)

    本文共34道题目 一.判断题 此题考查编码规范. 反射最常见的使用场景是做对象的序列化(serialization,有时候也叫Marshal & Unmarshal). 例如:Go语言标准库的 ...

  8. Linux下配置环境变量—— .bashrc 和 /etc/profile

    转载:https://blog.csdn.net/sun8112133/article/details/79901527 首先简单说一下什么是环境变量?环境变量简单的说就是当前环境下的参数或者变量.如 ...

  9. 【QT】二进制读取图像文件测试

    QDataStream in(&file); int n; in >> n ; file.close(); qDebug() << n<<"en& ...

  10. 【目录】Docker 基本操作

    1 容器基本操作 : https://www.cnblogs.com/defineconst/p/9990611.html 2 容器启动退出 : https://www.cnblogs.com/def ...