RDD转换成DataFrame的两种方法
2017-11-14 15:40
471 查看
1.根据反射推断schema
import org.apache.spark.{SparkContext, SparkConf} import org.apache.spark.sql.SQLContext object createDF { // 方法1 根据包括case class数据的RDD转换成DataFrame // case class定义表的schema,case class的属性会被读取并且成为列的名字 case class Person(name: String, age: Int) def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("sparkSQLTest").setMaster("local") val sc = new SparkContext(conf) val sqlContext = new SQLContext(sc) //先将RDD转化成case class 数据类型,然后再通过toDF()方法隐式转换成DataFrame import sqlContext.implicits._ val people = sc.textFile("your file path").map(_.split(",")).map(p =>Person(p(0), p(1).trim.toInt)).toDF() //注册成一个表 people.registerTempTable("peopleTable") //然后可以对表进行各种操作,比如打印出13到19岁青少年的姓名 val teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19") teenagers.map(t => "Name: " + t(0)).collect().foreach(println) } }
2.使用Programmatically的方式指定Schema
import org.apache.spark.{SparkContext, SparkConf} import org.apache.spark.sql.SQLContext import org.apache.spark.sql.types.{StringType, IntegerType, StructField, StructType} import org.apache.spark.sql.Row object createDF { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("sparkSQLTest").setMaster("local") val sc = new SparkContext(conf) val sqlContext = new SQLContext(sc) //step1: 从原来的 RDD 创建一个行的 RDD val peopleRow = sc.textFile("your file path").map(_.split(",")).map(p => Row(p(0), p(1))) //step2: 创建由一个 StructType 表示的模式, 并且与第一步创建的 RDD 的行结构相匹配 //构造schema用到了两个类StructType和StructFile,其中StructFile类的三个参数分别是(字段名称,类型,数据是否可以用null填充) val schema = StructType(Array(StructField("name", StringType, true), StructField("age", IntegerType, true))) //step3.在行 RDD 上通过 createDataFrame 方法应用模式 val people = sqlContext.createDataFrame(peopleRow, schema) people.registerTempTable("peopleTable") //然后可以对表进行各种操作,比如打印出13到19岁青少年的姓名 val teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19") teenagers.map(t => "Name: " + t(0)).collect().foreach(println) } }
相关文章推荐
- Java和scala实现 Spark RDD转换成DataFrame的两种方法小结
- Spark中RDD转换成DataFrame的两种方式(分别用Java和scala实现)
- RDD转换DataFrame的两种方式的比较
- RDD转换为DataFrame的两种方式及spark sql的简单实例
- Spark将RDD转换成DataFrame的两种方式
- Spark中RDD转换成DataFrame的两种方式(分别用Java和scala实现)
- Spark将RDD转换成DataFrame的两种方式
- VS2005中文输入法自动转换为全角的两种解决方法
- 3.Spark SQL:使用反射方式、编程方式,将RDD转换为DataFrame
- 将pdf转换成jpg格式的两种方法
- Python基于pandas实现json格式转换成dataframe的方法
- 整数转换成字符型的两种方法c++代码实例及运行结果
- Drawable转换为Bitmap两种方法
- Javadoc转换chm帮助文档的两种方法总结
- 将四个BYTE数值转换成IEEE754标准的浮点数(两种方法:用Addr函数取字节数字的首地址,或者用Absolute关键字)
- Spark RDD 到 LabelPoint的转换(包含构造临时数据的方法)
- 3.Spark SQL:使用反射方式、编程方式,将RDD转换为DataFrame
- C#多显示器转换的两种方法——SetWindowPos,Screen
- 面试题:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 用递归和循环两种方法完成树的镜像转换。
- VS2005中文输入法自动转换为全角的两种解决方法