第58课:使用Java和Scala在IDE中开发DataFrame实战

内容:
    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|
+----+-----+

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值