内容:
1.使用Java开发DataFrame实战
2.使用Scala开发DataFrame实战
1.可以把SparkSQl作为一个分布式查询引擎。SparkSQL一般都和Hive一起使用。
2.使用Java开发Spark应用程序的原因:
a) 企业生产环境下大多以Java为核心
b)Java更傻瓜,更易理解
3.SQLContext中有HiveContext子类。
Spark官网建议任何时候都用HiveContext。一般情况下都可以直接用HiveContext而不需要使用SQLContext
./spark-submit --file,可以通过指定hive-site.xml配置,这给我们一个启发:如果有一些特别的配置,可以这样指定。但如果指定其他文件,会覆盖默认参数hive-site.xml(注意:Spark的Conf目录下也有hive-site.xml文件)
配置Hive的不同数据来源。如果不配置的话Spark会自动找Spark中的Hive配置信息。
在哪台机上提交就需要在哪台机上安装Hive
4. Java代码如下:
package SparkSQL;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.SQLContext;
/**
* FileName: DataFrameOps
* Author: hadoop
* Email: 3165845957@qq.com
* Date: 18-10-27 下午3:22
* Description:使用Java的方式实战Dataframe的操作
*/
public class DataFrameJavaOps {
public static void main(String[] args){
//创建SparkConf用于读取系统信息并设置运用程序的名称
SparkConf conf = new SparkConf().setAppName("DataFrameOps").setMaster("spark://Master:7077");
//创建JavaSparkContext对象实例作为整个Driver的核心基石
JavaSparkContext sc = new JavaSparkContext(conf);
//设置输出log的等级
sc.setLogLevel("INFO");
//创建SQLContext上下文对象,用于SqL的分析
SQLContext sqlContext = new SQLContext(sc);
//创建dataFrame,可以简单的认为DataFrame是一张表
Dataset ds = sqlContext.read().json("file:///usr/local/spark/examples/src/main/resources/people.json");
//select * from table
ds.show();
//desc table
ds.printSchema();
//select name from table;
ds.select("name").show();
//select name,age+10 from table;
ds.select(ds.col("name"),ds.col("age").plus(10)).show();
//select * from table where age > 20;
ds.filter(ds.col("age").gt(20)).show();
//select count(1) from table group by age;
ds.groupBy(ds.col("age")).count().show();
sc.close();
}
}
5.Scala代码:
package SparkSQL
import org.apache.spark.sql.{Dataset, SQLContext, SparkSession}
import org.apache.spark.{SparkConf, SparkContext}
/**
* FileName: DataFrameOps
* Author: hadoop
* Email: 3165845957@qq.com
* Date: 18-10-27 下午4:03
* Description:使用Scala的方式实战Dataframe的操作
*
*/
object DataFrameScalaOps {
def main(args: Array[String]): Unit = {
//创建SparkConf用于读取系统信息并设置运用程序的名称
val conf = new SparkConf().setAppName("DataFrameScalaOps").setMaster("spark://Master:7077")
//创建JavaSparkContext对象实例作为整个Driver的核心基石
val sc = new SparkContext(conf)
//方便查看输出的日志信息,也可以设置为WARN、ERROR
sc.setLogLevel("ERROR")
//创建SQLContext上下文对象,用于SqL的分析
val sqlContex = new SQLContext(sc)
//创建dataFrame,可以简单的认为DataFrame是一张表
val ds = sqlContex.read.json("file:///usr/local/spark/examples/src/main/resources/people.json")
//select * from table;
ds.show
//desc printShema
ds.printSchema()
//select name from table;
ds.select("name").show()
//select name,age+10 from table;
ds.select(ds("name"),ds("age")+10).show()
//select * from table where age >10;
ds.filter(ds("age") >10).show()
//select count(1) from table group by age;
ds.groupBy("age").count().show()
}
}
6.spark-submit提交运用程序:
spark-submit --class SparkSQL.DataFrameJavaOps \
--master spark://Master:7077 \
/home/hadoop/IdeaScala/LearningBigdata/out/artifacts/LearningBigdata/LearningBigdata.jar
7.生产环境下,spark-submit提交运用程序比较方便:
spark-submit --class SparkSQL.DataFrameJavaOps \
--files /usr/local/hive/conf/hive-site.xml \
--driver-class-path /home/hadoop/mysql/mysql-connector-java-5.1.32-bin.jar \
--master spark:/Master:7077 \
/home/hadoop/IdeaScala/LearningBigdata/out/artifacts/LearningBigdata/LearningBigdata.jar
8.执行结果如下:
+----+-------+
| age| name|
+----+-------+
|null|Michael|
| 30| Andy|
| 19| Justin|
+----+-------+
root
|-- age: long (nullable = true)
|-- name: string (nullable = true)
+-------+
| name|
+-------+
|Michael|
| Andy|
| Justin|
+-------+
+-------+----------+
| name|(age + 10)|
+-------+----------+
|Michael| null|
| Andy| 40|
| Justin| 29|
+-------+----------+
+---+------+
|age| name|
+---+------+
| 30| Andy|
| 19|Justin|
+---+------+
+----+-----+
| age|count|
+----+-----+
| 19| 1|
|null| 1|
| 30| 1|
+----+-----+