SparkSQL之创建DataFrame
来源:互联网 发布:淘宝在哪里看未认证 编辑:程序博客网 时间:2024/04/29 15:52
def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local").setAppName("ScalaDataFrame") val sc = new SparkContext(conf) val sqlContext = new SQLContext(sc) val listRDD = sc.parallelize(List("zhangsan 13 168.5", "lisi 14 175.3", "wangwu 15 176.3")) // createDataFrame_1(listRDD, sqlContext) // createDataFrame_2(listRDD, sqlContext) // createDataFrame_3(listRDD, sqlContext) createDataFrame_4(listRDD, sqlContext) sc.stop()}/** * 将一个DataFrame注册成为一张临时表,在临时表上面执行sql的操作,方便我们的查询等操作 */def createDataFrame_4(listRDD: RDD[String], sqlContext: SQLContext) = { /** * 因为我们要使用sql的方式来操作SparkSQL对应的DataFrame * 应该把该DataFrame转化成为一张表,所以需要注册该DataFrame成为系统中的一张临时表 */ val df = createDataFrame_3(listRDD, sqlContext) df.registerTempTable("person") /** * 注册成为一张临时表之后,直接进行sql的操作, * 使用SQLContext,而不是df进行操作 */ val sqlDF = sqlContext.sql("select name, age, height from person where age > 14") sqlDF.show()}/** * 使用SQLContext的隐士转化快速将一个RDD转化为一个DataFrame */def createDataFrame_3(listRDD: RDD[String], sqlContext: SQLContext): DataFrame = { import sqlContext.implicits._ //这个隐士转换必须要有 val rowRDD = listRDD.map(line => { val splits = line.split(" ") val name = splits(0).trim val age = splits(1).trim.toInt val height = splits(2).trim.toDouble (name, age, height) }) /** * 第三中创建DataFrame的方式,使用sqlContext内部的一个隐士转换, * 增强普通RDD的功能 * rdd.toDF(cols:String*) * col是对该rdd中所包含的数据的一个说明,简单认为就是转化为DataFrame之后给每个列 * 起的一个列名 */ val df = rowRDD.toDF("name", "age", "height") // df.printSchema() // df.show() df}def createDataFrame_2(listRDD: RDD[String], sqlContext: SQLContext): Unit = { val personRDD: RDD[Person] = listRDD.map(line => { val splits = line.split(" ") val name = splits(0).trim val age = splits(1).trim.toInt val height = splits(2).trim.toDouble new Person(name, age, height) }) /** * scala中通过反射的方式将一个RDD,转换为一个DataFrame * 在java中获取一个类的字节码Class对象,直接类名.class * 在scala中需要通过classOf[类名]的方法 */ val df = sqlContext.createDataFrame(personRDD, classOf[Person]) df.printSchema() df.show()}/** * 在代码中动态生成DataFrame */def createDataFrame_1(listRDD: RDD[String], sqlContext: SQLContext): Unit = { //---->将RDD---->DataFrame来进行一个操作 val rowRDD: RDD[Row] = listRDD.map(line => { val splits = line.split(" ") val name = splits(0).trim val age = splits(1).trim.toInt val height = splits(2).trim.toDouble Row(name, age, height) }) //通过动态编码的方式 val structType = StructType(Array( StructField("name", DataTypes.StringType, true), StructField("age", DataTypes.IntegerType, true), StructField("height", DataTypes.DoubleType, true) )) val df = sqlContext.createDataFrame(rowRDD, structType) df.show()}
0 0
- SparkSQL之创建DataFrame
- SparkSQL schema创建DataFrame
- SparkSql之DataFrame操作
- sparkSQL:dataframe
- sparksql dataframe
- SparkSQL---DataFrame
- pandas之DataFrame创建
- SparkSQL------SQL,DataFrame,DataSet
- SparkSQL-DataFrame学习笔记
- SparkSQL与DataFrame
- SparkSQL---Dataframe(Dynamic)
- SparkSQL---Dataframe(Reflection)
- SparkSQL学习笔记(一)DataFrame
- DataFrame和SparkSql使用区别
- SparkSQL操作RDD转DataFrame
- SparkSQL中DataFrame常用API
- SparkSQL中DataFrame常用API
- spark之DataFrame 通过反射创建
- 不同版本Eclipse对JDK版本要求
- java编译时与运行时概念明晰
- HTTP状态码
- 3D XPoint工作原理
- 不正经运维狗的文档1—15
- SparkSQL之创建DataFrame
- ZOJ 2418Matrix
- Debain 8.7
- 数组和簇(正弦余弦)
- CS 231A CV(winter 2014) problem set 3第一题第三小题(给定关键点及边框寻找最优边框)
- [ERP]VMI概念与运用场景
- CentOS7下vsftpd虚拟用户配置
- iOS
- maven增量编译的思考(转载)