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. 找不到指定的 VM 安装:类型 标准 VM,名称 jre7

    问题背景是这样 原来使用的是jre7.0.55,后来为了安装使用 layabox IDE ,然后装了jdk_8u144 之后需要切换环境变量 之后java项目调试的时候重新设置了jdk,没问题. 直到 ...

  2. python 奇偶拆分list,python拆分list,得到一个原来list的奇数list,一个原来list的偶数list

    需求:现在有一个list ,range_data = ['m', 'M', 'h', 'c', 'X', 'Z', 'A', 'o'] 希望得到两个list,  一个是奇数list =['m', 'h ...

  3. VPS、虚拟主机、云主机的区别

    引用知乎网友通俗的例子解释: 1. 小王是深圳的一拆迁户,有钱任性:自己租了一块地皮[带宽],盖了一栋10000平方的房子[服务器],计划租给别人赚钱.2. 但是10000平方的房子太大,能租起的人太 ...

  4. Shell脚本编程(三):shell参数传递

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 实例 以下实例我们向脚本传递三 ...

  5. netstat实现原理

    因为最近接手的项目是基于嵌入式Linux openwrt的,一开始以为会跟之前的服务器开发没什么大的区别,但是遇到问题去分析的时候才发现,工具链还是有些差别的,openwrt的netstat是属于一个 ...

  6. ShiftRows方法简介

    ShiftRows 是HSSFSheet工作薄的方法 ShiftRows(int startRow,int endRow,int n)参数介绍:startRow:开始行endRow:末尾行n:移动n行 ...

  7. linux下好玩或者好用的小工具

    本篇文章用于记录自己认为很好玩的linux下的小工具,不断添加中..大家如果有什么好玩的小工具的话,欢迎留言告诉我. 1. cmatrix工具 功能介绍: 可以产生黑客帝国中字符满屏幕飞的效果,当你离 ...

  8. android studio设置imageview显示图片

    拖动imageview 选择图片 .png 代码引用: private Imageview pay; pay = (ImageView)findViewById(R.id.imageView2); p ...

  9. RTX临界段,中断锁与任务锁

    临界段         代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行不被中断,在进入临界段之前须关中断,而临界段代码执行完毕后,要立即开中断.    ...

  10. appium定位h5

    1.手机安装Chrome浏览器 2.开启USB调试模式,并使用安装的Chrome浏览器打开待测H5页面 3.在电脑端的Chrome浏览器输入chrome://inspect               ...