Spark建立DataFrame和讀取CSV資料檔案
阿新 • • 發佈:2019-01-23
之前寫的程式中,有些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>