SQLContext与HiveContext的使用

本文介绍了在Spark 1.6中使用的SQLContext及其过时情况,并提供了使用示例代码。同时,文章还详细讲解了如何配置并使用已过时的HiveContext来访问Hive表的方法。

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~
https://blog.youkuaiyun.com/xiaoduan_/article/details/79730428

SQLContext与HiveContext的使用

SQLContext的使用

SQLContext在Spark1.6中使用,在spark2.x中已经标记为过时,不推荐使用。

示例代码
package com.anthony.spark
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}

/**
  * @Description: SQLContext的使用
  * @Date: Created in 07:09 2018/3/28
  * @Author: Anthony_Duan
  */

object SQLContextApp {

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

    val path = args(0)

    //1)创建相应的Context
    val sparkConf = new SparkConf()

//    在生产上通过脚本的方式指定
//    sparkConf.setAppName("SQLContextApp").setMaster("local[2]")

    val sc = new SparkContext(sparkConf)
    val sqlContext = new SQLContext(sc)

    //2)相关处理:json
    val people = sqlContext.read.format("json").load(path)
    people.printSchema()
    people.show()

    //3)关闭资源
    sc.stop()
  }
}
提交

这里我使用一个shell文件作为示例
1. vim HiveContext.sh
2. chmod +x HiveContext
3. 写入内容如下

spark-submit \
--name SQLContextApp \
--class com.anthony.spark.SQLContextApp \
--master local[2] \
/Users/duanjiaxing/lib/sql-1.0.jar \
/Users/duanjiaxing/data/test.json
HiveContext的使用

HiveContext也是已经过时的不推荐使用。

相关配置

如果想要用spark访问hive的表需要进行一下的配置
1. 拷贝 ${HIVE_HOME}/conf/hive-site.xml${SPARK_HOME}/conf
2. 在pom.xml文件中添加一下依赖

     <!--添加hive依赖-->
       <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_2.11</artifactId>
            <version>${spark.version}</version>
        </dependency>
示例代码
package com.anthony.spark
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.hive.HiveContext

/**
  * @Description:
  * @Date: Created in 07:58 2018/3/28
  * @Author: Anthony_Duan
  */
object HiveContextApp {

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

    //1)创建相应的Context
    val sparkConf = new SparkConf()

    //    在生产上通过脚本的方式指定
    //    sparkConf.setAppName("SQLContextApp").setMaster("local[2]")

    val sc = new SparkContext(sparkConf)
    val hiveContext = new HiveContext(sc)

    //2)相关处理:hiveTable
    hiveContext.table("emp").show()

    //3)关闭资源
    sc.stop()
  }
}
提交注意事项

使用mvn clean package -DskipTests 编译后会有一个jar包
然后将jar提交到spark上执行的时候需要指定mysql的连接驱动 通过–jars指定mysql驱动的绝对路径
这里我使用一个shell文件作为示例
1. vim HiveContext.sh
2. chmod +x HiveContext
3. 写入内容如下

spark-submit \
--class com.anthony.spark.HiveContextApp \
--master local[2] \
--jars /Users/duanjiaxing/software/mysql-connector-java-5.1.27-bin.jar \
/Users/duanjiaxing/lib/sql-1.0.jar
package com.university.demo.util.spark; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.sql.DataFrame; import org.apache.spark.sql.Row; import org.apache.spark.sql.SQLContext; import org.springframework.stereotype.Component; import java.util.Properties; @Component public class Sparkdao { private final String DB_URL = "jdbc:mysql://localhost:3396/kaoyan?useSSL=false&serverTimezone=Asia/Shanghai"; private final String DB_USERNAME = "root"; private final String DB_PASSWORD = "123456"; private SparkConf sparkConf; private JavaSparkContext javaSparkContext; private SQLContext sqlContext; public Properties getDBProperties(){ Properties props = new Properties(); props.put("user", DB_USERNAME); props.put("password", DB_PASSWORD); return props; } /* * 初始化Load * 创建sparkContext, sqlContext, hiveContext * */ public Sparkdao() { initSparckContext(); initSQLContext(); } /* * 创建sparkContext * */ private void initSparckContext() { String warehouseLocation = System.getProperty("user.dir"); sparkConf = new SparkConf() .setAppName("from-to-mysql") .set("spark.sql.warehouse.dir", warehouseLocation) .setMaster("local"); javaSparkContext = new JavaSparkContext(sparkConf); } /* * 创建sqlContext * 用于读写MySQL中的数据 * */ private void initSQLContext() { sqlContext = new SQLContext(javaSparkContext); } public Integer count(String table) { DataFrame rows = sqlContext.read().jdbc(DB_URL, table, getDBProperties()).where("1=1"); JavaRDD<Row> testRdd= rows.toJavaRDD(); return testRdd.collect().size(); } public Integer countLog(String type) { DataFrame rows = sqlContext.read().jdbc(DB_URL, "tb_log", getDBProperties()). where("opt ='" + type + "'"); JavaRDD<Row> testRdd= rows.toJavaRDD(); return testRdd.collect().size(); } }
最新发布
03-28
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值