创建DataFrame的几种方式

第一种方式:使用case class样本类
        
        (1)定义表的schema
        
            7698,BLAKE,MANAGER,7839,1981/5/1,2850,0,30
            
            case class Emp(empno:Int,ename:String,job:String,mgr:Int,hiredate:String,sal:Int,comm:Int,deptno:Int)
        
        (2)读入数据
        
            var lines = sc.textFile("/usr/local/tmp_files/emp.csv").map(_.split(","))
            
        (3)把每行数据映射到Emp中。把表结构和数据,关联。
        
            val allEmp = lines.map(x => Emp(x(0).toInt,x(1),x(2),x(3).toInt,x(4),x(5).toInt,x(6).toInt,x(7).toInt))
        
        (4)生成DataFrame
            
            val df1 = allEmp.toDF
            本质还是RDD
            
            df1.show

            创建DataFrame的几种方式_第1张图片

 

 


        
第二种方式 使用Spark Session
        (1)什么是Spark Session
            
            在2.0以后引入的一种统一的访问方式,使用Spark Session可以访问Spark所有组件。
            
        (2)使用 StructType 来创建schema
            
            import org.apache.spark.sql.types._
            
            val myschema = StructType(
                List(
                StructField("empno", DataTypes.IntegerType), 
                StructField("ename", DataTypes.StringType),
                StructField("job", DataTypes.StringType),
                StructField("mgr", DataTypes.IntegerType),
                StructField("hiredate", DataTypes.StringType),
                StructField("sal", DataTypes.IntegerType),
                StructField("comm", DataTypes.IntegerType),
                StructField("deptno", DataTypes.IntegerType)))
                
            val myschema = StructType(List(StructField("empno", DataTypes.IntegerType), StructField("ename", DataTypes.StringType),StructField("job", DataTypes.StringType),StructField("mgr", DataTypes.IntegerType),StructField("hiredate", DataTypes.StringType),StructField("sal", DataTypes.IntegerType),StructField("comm", DataTypes.IntegerType),StructField("deptno", DataTypes.IntegerType)))
        
        (3)读取文件
            
            var lines = sc.textFile("/usr/local/tmp_files/emp.csv").map(_.split(","))
            
        (4)数据与表结构匹配
            
            import org.apache.spark.sql.Row
            
            val allEmp = lines.map(x => Row(x(0).toInt,x(1),x(2),x(3).toInt,x(4),x(5).toInt,x(6).toInt,x(7).toInt))
                
        (5)创建DataFrame
            
            Spark session available as 'spark'.
            
            val df2 = spark.createDataFrame(allEmp,myschema)

 

第三种方式 -直接读取一个带格式的文件:json(分两种方式读)

val df=spark.read.json("/opt/module/spark-2.1.0/examples/src/main/resources/people.json")

创建DataFrame的几种方式_第2张图片

val df4=spark.read.format("json").load("/opt/module/spark-2.1.0/examples/src/main/resources/people.json")

创建DataFrame的几种方式_第3张图片

你可能感兴趣的:(Spark)