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

本期内容:

1. 使用Java开发DataFrame实战

2.  使用Scala开发DataFrame实战

 

Spark1.3开始大多数SparkSQL都基于DataFrame编程。因为DataFrame高效且功能强大。

可以把SparkSQl作为一个分布式查询引擎。SparkSQL一般都和Hive一起使用。

使用Java开发Spark应用程序的原因:

1. 企业生产环境下大多以Java为核心

2. Java更傻瓜,更易理解

 

SQLContext中有HiveContext子类。

 

Spark官网建议任何时候都用HiveContext。一般情况下都可以直接用HiveContext而不需要使用SQLContext

./spark-submit --file,可以通过指定hive-site.xml配置,这给我们一个启发:如果有一些特别的配置,可以这样指定。但如果指定其他文件,会覆盖默认参数hive-site.xml(注意:SparkConf目录下也有hive-site.xml文件)

spark-submit --class com.dt.spark.sql.DataFrameOps --master spark://slq1:7077 /home/richard/spark-1.6.0/SparkApps/wordCount.jar

 

配置Hive的不同数据来源。如果不配置的话Spark会自动找Spark中的Hive配置信息。

在哪台机上提交就需要在哪台机上安装Hive

 

Java代码如下:

package com.dt.spark.SparkApps;

 

import org.apache.spark.SparkConf;

import org.apache.spark.api.java.JavaSparkContext;

import org.apache.spark.sql.DataFrame;

import org.apache.spark.sql.SQLContext;

 

public class DataFrameOps {

public static void main(String[] args){

//创建SparkConf用于读取系统配置信息并设置当前应用程序名称

SparkConf conf = new SparkConf().setAppName("DataFrameOps");

//创建JavaSparkContext对象实例作为整个Driver核心基石

JavaSparkContext sc = new JavaSparkContext(conf);

//创建SQLContext上下文对象用于SQL分析

SQLContext sqlContext = new SQLContext(sc);

//创建DataFrame,可以简单认为DataFrame是一张表

//DataFrame可以来源于多种格式

//如JSON,可以直接创建DataFrame

//SQLContext只支持SQL一种方言,用HiveContext就可以支持多种

//方言(默认HQL,可以设置)。

DataFrame df = sqlContext.read().json("HDFS://slq1:9000/user/people.json");

//select * from table

df.show();

//describe table;

df.printSchema();

df.select("name").show();

// select name age+1 from table;

df.select(df.col("name"),df.col("age").plus(10)).show();

//select * from table where age > 20;

df.filter(df.col("age").gt(20)).show();

//select count(1) from table group by age;

df.groupBy(df.col("age")).count().show();

}

}

 

下面编写scala代码:

package com.dt.spark.SparkApps.sql

 

import org.apache.spark.SparkContext

import org.apache.spark.SparkConf

import org.apache.spark.sql.SQLContext

 

// 使用Java的方式开发实战对DataFrame的操作

object DataFrameOps {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()

    conf.setAppName("DataFrameOps")

    conf.setMaster("spark://slq1:7077")

    val sc = new SparkContext

    val sqlContext = new SQLContext(sc)

    val df = sqlContext.read.json("hdfs://slq1:9000/user/data/SparkResources/people.json")

    df.show()

    df.printSchema()

    df.select("name").show()

    df.select(df("name"),df("age") + 10).show()

    df.filter(df("age") > 10).show()

    df.groupBy("age").count.show()    

  }

}

导出为jar包:

点击eclipse菜单File->export,选择destinationJAR file后点击Next

 

选择SparkAppsScala项目,选择导出路径后点击Finish

 

将生成的SparkAppsScala.jar文件放入虚拟机中。

编写shell执行:

/home/richard/spark-1.6.0/bin/spark-submit --class com.dt.spark.SparkApps.sql.DataFrameOps --master spark://slq1:7077 /home/richard/slq/spark/SparkAppsScala.jar

生产环境下,执行shell一般是这样的:

/home/richard/spark-1.6.0/bin/spark-submit --class com.dt.spark.SparkApps.sql.DataFrameOps --files //home/richard/spark-1.6.0/conf/hive-site.xml --driver-class-path /home/richard/hive-1.2.1/lib/MySQL-connector-java-5.1.32-bin.jar --master spark://slq1:7077 /home/richard/slq/spark/SparkAppsScala.jar

 

执行结果如下:

 

[richard@slq1 spark]$ ./SparkAppsScala.sh

16/03/27 07:40:57 INFO scheduler.DAGScheduler: Job 2 finished: show at DaraFrameOps.scala:16, took 1.228109 s

+----+-------+

| age|   name|

+----+-------+

|null|Michael|

|  30|   Andy|

|  19| Justin|

+----+-------+

其他省略

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值