Spark SQL操作Parquet文件(1.2) 2015-04-14 23:20

关于

因为Parquet文件中包含了Schema信息,也就是说,Parquet文件是Schema自解释的. 因此Spark SQL操作Parquet时,不需要指定Schema,因为Spark SQL可以根据Parquet文件中的Schema信息,解析出Parquet文件对应的SQL Schema.

本例中的Parquet文件,请先通过Hive创建

例子

以下例子在spark shell中运行

1
2
3
4
5
6
7
8
9
val sqlContext = new org.apache.spark.sql.SQLContext(sc)

val parquetFile = sqlContext.parquetFile("hdfs://ctrl:9000/user/hive/warehouse/student/000000_0")

parquetFile.registerTempTable("student")

val resultRDD = sqlContext.sql("SELECT id,name FROM student WHERE id > 101")

resultRDD.map(t => "id: " + t(0) + ", " + "name:" + t(1)).collect().foreach(println)
  • 使用Spark 1.3的DataFrame

Spark SQL 1.3既可以使用注册临时Table的方式进行加载,也可以通过直接通过load的方式加载得到DataFrame(未测试):

1
2
3
4
5
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val df = sqlContext.load("hdfs://ctrl:9000/user/hive/warehouse/student/000000_0")  
//Spark SQL能够解析出来,给定的parquet文件是有id和name两列构成  
df.select("id", "name").collect().foreach(row => println(row(0) + "," + row(1)))  
df.select("name").save("hdfs://ctrl:9000/tmp/output.parquet")
Tags: #Spark    Post on Spark