scala>val spark=new org.apache.spark.sql.SQLContext(sc)
user.json
{"age":"45","gender":"M","occupation":"7","userID":"4","zipcode":"02460"}{"age":"1","gend er":"F","occupation":"10","userID":"1","zipcode":"48067"}
$hadoop dfs -put user.json /user
scala>val userDF=spark.read.json("/user/user.json")
scala>userDF.show(2) #查看數據
scala> userDF.limit(2).toJSON.foreach(x =>println(x))
scala> userDF.printSchema
scala>userDF.select("userID","age").show #查詢數據
scala>userDF.select(max("age"),min("age"),avg("age")).show
scala>userDF.select("userID", "age").filter("age > 30").show(2)
scala>userDF.filter("age > 30").select("userID", "age").show(2) #過濾數據
scala> userDF.groupBy("age").count().show()
scala> userDF.groupBy("age").agg(count("gender")).show()
scala> userDF.groupBy("age").agg(countDistinct("gender")).show()
scala> userDF.groupBy("age").agg("gender"->"count","occupation"->"count").show()
第一步:得到DataFrame或Dataset val ds = ...
第二步:注冊成臨時表 ds.registerTempTable("xxx")
第三步:用SQL計算 spark.sql ("SELECT ...")
def agg(aggExpr: (String, String), aggExprs: (String, String)*): DataFrame = {
groupBy().agg(aggExpr, aggExprs : _*) }
還有max、mean、min、sum、avg、explode、size、sort_array、day、to_date、abs、acros、asin、atan
總體上而言內置函數包含了五大基本類型:
1、聚合函數,例如countDistinct、sumDistinct等;
2、集合函數,例如sort_array、explode等
3、日期、時間函數,例如hour、quarter、next_day
4、數學函數,例如asin、atan、sqrt、tan、round等;
5、開窗函數,例如rowNumber等
6、字符串函數,concat、format_number、rexexp_extract
7、其它函數,isNaN、sha、randn、callUDF
Spark SQL支持的Hive特性
Spark SQL支持多部分的Hive特性,例如:
- Hive查詢語句,包括:
- SELECT
- GROUP BY
- ORDER BY
- CLUSTER BY
- SORT BY
- 所有Hive運算符,包括
- 比較操作符(=, ⇔, ==, <>, <, >, >=, <=, etc)
- 算術運算符(+, -, *, /, %, etc)
- 邏輯運算符(AND, &&, OR, ||, etc)
- 復雜類型構造器
- 數學函數(sign,ln,cos,etc)
- 字符串函數(instr,length,printf,etc)
- 用戶自定義函數(UDF)
- 用戶自定義聚合函數(UDAF)
- 用戶自定義序列化格式器(SerDes)
- 窗口函數
- Joins
- JOIN
- {LEFT|RIGHT|FULL} OUTER JOIN
- LEFT SEMI JOIN
- CROSS JOIN
- Unions
- 子查詢
- SELECT col FROM ( SELECT a + b AS col from t1) t2
- Sampling
- Explain
- 表分區,包括動態分區插入
- 視圖
- 所有的Hive DDL函數,包括:
- CREATE TABLE
- CREATE TABLE AS SELECT
- ALTER TABLE
- 大部分的Hive數據類型,包括:
- TINYINT
- SMALLINT
- INT
- BIGINT
- BOOLEAN
- FLOAT
- DOUBLE
- STRING
- BINARY
- TIMESTAMP
- DATE
- ARRAY<>
- MAP<>
- STRUCT<>
6.1.3 不支持的Hive功能
下面是當前不支持的Hive特性,其中大部分特性在實際的Hive使用中很少用到。
Major Hive Features
- Tables with buckets:bucket是在一個Hive表分區內進行hash分區。Spark SQL當前不支持。
Esoteric Hive Features
- UNION type
- Unique join
- Column statistics collecting:當期Spark SQL不智齒列信息統計,只支持填充Hive Metastore的sizeInBytes列。
Hive Input/Output Formats
- File format for CLI: 這個功能用於在CLI顯示返回結果,Spark SQL只支持TextOutputFormat
- Hadoop archive