Spark创建DataFrame和读取CSV数据文件

之前写的程序中,有些API在Spark SQLContext没有,我计算的结果先保存在rdd中,最后在使用RDD转换成dataframe进行保存,话不多说下面是代码.

//一个StruceField你可以把它当成一个特征列。分别用列的名称和数据类型初始化
   val structFields = List(StructField("age",DoubleType),StructField("height",DoubleType))
   //最后通过StructField的集合来初始化表的模式。
    val types = StructType(structFields)

    val sparkConf = new SparkConf().setAppName("RDDToDataFrame").setMaster("local")
    val sparkContext = new SparkContext(sparkConf)
    val sqlContext = new SQLContext(sparkContext)

    val rdd = sparkContext.textFile("D:\\Hadoop\\hadoop-2.6.0\\datatest\\world.csv")
    //Rdd的数据,里面的数据类型要和之前的StructField里面数据类型对应。否则会报错。
    val rowRdd = rdd.map(line=>Row(line.trim.split(",")(0).toDouble,line.trim.split(",")(1).toDouble))
    //通过SQLContext来创建DataFrame.
    val df = sqlContext.createDataFrame(rowRdd,types)
    df.show()
    sparkContext.stop()

下面是Spark读取CSV数据文件的代码:

     val conf = new SparkConf()
     conf.setAppName("FilterAndWhere").setMaster("local")
     val sparkContext = new SparkContext(conf)
     val sqlContext = new SQLContext(sparkContext)
     val data =sqlContext.read.    format("com.databricks.spark.csv")
      .option("header","true") //这里如果在csv第一行有属性的话,没有就是"false"
      .option("inferSchema",true.toString)//这是自动推断属性列的数据类型。
      .load("D:\\Hadoop\\hadoop-2.6.0\\datatest\\world.csv")//文件的路径

在这里如果使用上面的代码的话,需要在Maven里面的pom文件中加入下面这个依赖。


        <dependency>
            <groupId>com.databricks</groupId>
            <artifactId>spark-csv_2.10</artifactId>
            <version>1.4.0</version>
        </dependency>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页