1. 程式人生 > >Spark建立DataFrame和讀取CSV資料檔案

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>