java

 public class ReflectionDemo {
private static SparkConf conf = new SparkConf().setAppName("reflectdemo").setMaster("local");
private static JavaSparkContext jsc = new JavaSparkContext(conf); private static SparkSession session = new SparkSession(jsc.sc()); public static void main(String[] args) throws AnalysisException { // rdd
JavaRDD<String> rdd = jsc.textFile("./src/main/java/cn/tele/spark_sql/rdd2dataset/students.txt"); // 封装rdd
JavaRDD<Student> mapRdd = rdd.map(new Function<String, Student>() { private static final long serialVersionUID = 1L; @Override
public Student call(String v1) throws Exception {
String[] fields = v1.split(",");
Student student = new Student(Integer.valueOf(fields[0]), fields[1], Integer.valueOf(fields[2]));
return student;
}
}); // 通过反射的方式进行转换
Dataset<Row> dataset = session.createDataFrame(mapRdd, Student.class); // 注册为临时信息表
// dataset.registerTempTable("students"); dataset.createOrReplaceTempView("studentsView"); Dataset<Row> result = session.sql("select * from studentsView where age<=18");
// result.show(); // 把dataset转换成rdd
JavaRDD<Student> javaRDD = result.javaRDD().map(new Function<Row, Student>() { private static final long serialVersionUID = 1L; @Override
public Student call(Row v1) throws Exception {
return new Student(v1.getAs("id"), v1.getAs("name"), v1.getAs("age"));
}
}); javaRDD.foreach(new VoidFunction<Student>() { private static final long serialVersionUID = 1L; @Override
public void call(Student t) throws Exception {
System.out.println(t);
}
});
session.stop();
jsc.close();
}
}

scala

 case class Student(val id:Int,val name:String,val age:Int)

 object ReflectionDemo {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("reflectdemo").setMaster("local") val sc = new SparkContext(conf) val sqlContext = new SQLContext(sc) //导入隐式转换
import sqlContext.implicits._ //创建rdd
val rdd = sc.textFile("./src/main/scala/cn/tele/spark_sql/rdd2dataframe/students.txt", 2) //转换rdd为dataframe
val dataframe = rdd.map(line => {
val arr = line.split(",");
new Student(arr(0).trim().toInt, arr(1).trim(), arr(2).trim().toInt)
}).toDF() //创临时视图
dataframe.createOrReplaceTempView("students") // dataframe.show() val df = sqlContext.sql("select * from students where age<=18") val newRdd = df.rdd.map(row => new Student(row.getAs[Int]("id"), row.getAs[String]("name"), row.getAs[Int]("age"))) newRdd.foreach(println(_))
} }

sparksql 用反射的方式将rdd转换成dataset/dataframe的更多相关文章

  1. sparksql 动态设置schema将rdd转换成dataset/dataframe

    java public class DynamicDemo { private static SparkConf conf = new SparkConf().setAppName("dyn ...

  2. Spark之 RDD转换成DataFrame的Scala实现

    依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2. ...

  3. RDD转换成DataFrames

    官方提供了2种方法 1.利用反射来推断包含特定类型对象的RDD的schema.这种方法会简化代码并且在你已经知道schema的时候非常适用. 先创建一个bean类 case class Person( ...

  4. 利用反射将Datatable、SqlDataReader转换成List模型

    1. DataTable转IList public class DataTableToList<T>whereT :new() { ///<summary> ///利用反射将D ...

  5. 利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model

    利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model   使用场景:网站配置项目,为了便于管理,网站有几个Model类来管理配置文件, 比如ConfigWebsiteMo ...

  6. [C#]Winform后台提交数据且获取远程接口返回的XML数据,转换成DataSet

    #region 接口返回的Xml转换成DataSet /// <summary> /// 返回的Xml转换成DataSet /// </summary> /// <par ...

  7. TXT文件转换成DataSet数据集

    /// <summary> /// TXT文件转换成DataSet数据集 /// </summary> /// <param name="FilePath&qu ...

  8. c#将List&lt;T&gt;转换成DataSet

    /// <summary>         /// List<T> 转换成DataSet         /// </summary>         /// &l ...

  9. Spark中RDD转换成DataFrame的两种方式(分别用Java和Scala实现)

    一:准备数据源     在项目下新建一个student.txt文件,里面的内容为: ,zhangsan, ,lisi, ,wanger, ,fangliu, 二:实现 Java版: 1.首先新建一个s ...

随机推荐

  1. Java对ad操作

    转载:http://blog.csdn.net/binyao02123202/article/details/18697953

  2. 学习笔记:mpvue开发小程序——入门

    接下来可能要开发一个小程序,同事推荐使用mpvue,那么我提前熟悉下. 官网地址:http://mpvue.com/ 1.快速上手 http://mpvue.com/mpvue/quickstart/ ...

  3. CentOS 6 通过DVD快速建立本地YUM源

    一.将DVD光盘放入RedHat/CentOS6.X服务器/电脑光驱中 二.挂载DVD光驱到/mnt/cdrom # mkdir -p /mnt/cdrom # mount -t iso9660 /d ...

  4. 硬件——STM32 , SN74HC573锁存器

    74HC573是一款高速CMOS器件: 上图中:输出使能为:OE   锁存使能为:LE 典型电路: 上图中:PWR-AL-0,PWR-AL-1,PWR-AL-2:是单片机输出的高低电平给573 对应的 ...

  5. 【BZOJ 3238】[Ahoi2013]差异

    [链接]h在这里写链接 [题意]     还有更简洁的题目描述吗/xk [题解]     对于lenti+lentj这一部分,比较好处理.     可以弄一个前缀和.     然后O(N)扫描一遍. ...

  6. zynq mac地址修改

    工作中遇到多个zynq板子同时位于一个交换机网络中,由于默认mac地址相同,无法进行通信,因此需要对每个板子修改mac地址. 方案:使用uboot配置文件 步骤: 在uboot配置文件中添加及修改下面 ...

  7. C++学习笔记(达内视频版)

    达内C++(陈宗权主讲) 第一天: 课程分为Core C++(标准C++.不依赖操作系统)和Unix C++. 1.配置bash,运行.sh文件. vi bash_profile 在"pat ...

  8. Ubuntu设置IP(VMware9.03)

    说明:在VMware上新安装Ubuntu11.04(64位) vi编辑器特难用,输入老出错,费了老大劲才把IP改好,IP改完之后最好立马重装一个编辑器vim. 设置静态IP: # vi /etc/ne ...

  9. [LeetCode][Java] Letter Combinations of a Phone Number

    题目: Given a digit string, return all possible letter combinations that the number could represent. A ...

  10. 【Nutch2.2.1基础教程之6】Nutch2.2.1抓取流程 分类: H3_NUTCH 2014-08-15 21:39 2530人阅读 评论(1) 收藏

    一.抓取流程概述 1.nutch抓取流程 当使用crawl命令进行抓取任务时,其基本流程步骤如下: (1)InjectorJob 开始第一个迭代 (2)GeneratorJob (3)FetcherJ ...