spark相关介绍-提取hive表(一)

本文环境说明
centos服务器
jupyter的scala核spylon-kernel
spark-2.4.0
scala-2.11.12
hadoop-2.6.0
本文主要内容
  • spark读取hive表的数据,主要包括直接sql读取hive表;通过hdfs文件读取hive表,以及hive分区表的读取。
  • 通过jupyter上的cell来初始化sparksession。
  • 文末还有通过spark提取hdfs文件的完整示例
jupyter配置文件
  • 我们可以在jupyter的cell框里面,对spark的session做出对应的初始化,具体可以见下面的示例。
%%init_spark
launcher.master = "local[*]"
launcher.conf.spark.app.name = "BDP-xw"
launcher.conf.spark.driver.cores = 2
launcher.conf.spark.num_executors = 3
launcher.conf.spark.executor.cores = 4
launcher.conf.spark.driver.memory = '4g'
launcher.conf.spark.executor.memory = '4g'
// launcher.conf.spark.serializer = "org.apache.spark.serializer.KryoSerializer"
// launcher.conf.spark.kryoserializer.buffer.max = '4g'
import org.apache.spark.sql.SparkSession
var NumExecutors = spark.conf.getOption("spark.num_executors").repr
var ExecutorMemory = spark.conf.getOption("spark.executor.memory").repr
var AppName = spark.conf.getOption("spark.app.name").repr
var max_buffer = spark.conf.getOption("spark.kryoserializer.buffer.max").repr
println(f"Config as follows: \nNumExecutors: $NumExecutors, \nAppName: $AppName,\nmax_buffer:$max_buffer")

jupyter上spark配置示例

  • 直接查看我们初始化的sparksession对应的环境各变量

jupyter_spark_confs

从hive中取数
直接sparksql走起
import org.apache.spark.sql.SparkSession
val sql_1 = """select * from tbs limit 4 """
var df = sql(sql_1)
df.show(5, false)

spark_sql取数示例

通过hdfs取数
object LoadingData_from_hdfs_base extends mylog{
   // with Logging
    ...
    
    def main(args: Array[String]=Array("tb1", "3", "\001", "cols", "")): Unit = {
   
          if (args.length < 2) {
   
          println("Usage: LoadingData_from_hdfs <tb_name, parts. sep_line, cols, paths>")
           System.err.println("Usage: LoadingData_from_hdfs <tb_name, parts, sep_line, cols, paths>")
           System.exit(1)
          }
        log.warn("开始啦调度")
        val tb_name = args(0)
        val parts = args(1)
        val sep_line = args(2)
        val select_col = args(3)
        val save_paths = args(4)
        val select_cols = select_col.split("#").toSeq
        log.warn(s"Loading cols are : \n $select_cols")
        val gb_sql = s"DESCRIBE FORMATTED ${tb_name}"
        val gb_desc = sql(gb_sql)
        val hdfs_address = gb_desc.filter($"col_name".contains("Location")).take(1)(0).getString(1)
        val hdfs_address_cha = s"$hdfs_address/*/"
        val Cs = new DataProcess_base(spark)
        val tb_desc = Cs.get_table_desc(tb_name)
        val raw_data = Cs.get_hdfs_data(hdfs_address)
        val len1 = raw_data.map(item => item.split(sep_line)).first.length
        val names = tb_desc.filter(!$"col_name".contains("#")).dropDuplicates(Seq("col_name")).sort("id").select("col_name").take(len1).map(_(0)).toSeq.map(_.toString)
        val schema1 = StructType(names.map(fieldName => StructField(fieldName, StringType)))
        val rawRDD = raw_data.map(_.split(sep_line).map(_.toString)).map(p => Row(p: _*)).filter(_.length == len1)
        val df_data = spark.createDataFrame(rawRDD, schema1)//.filter("custommsgtype = '1'")
        val df_desc = select_cols.toDF.join(tb_desc, $"value"===$"col_name", "left")
        val df_gb_result = df_data.select(select_cols.map(df_data.col(_)): _*)//.limit(100)
        df_gb_result.show(5, false)
        ...
//         spark.stop()
    }
}
val cols = "area_name#city_name#province_name"
val tb_name = "tb1"
val sep_line = "\u0001"
// 执行脚本
LoadingData_from_hdfs_base.main(Array(tb_name, "4", sep_line, cols, ""))

spark_hdfs取数示例

)

判断路径是否为文件夹
  • 方式1
def pathIsExist(spark: SparkSession, path: String): Boolean = {
   
    val filePath = new org.apache.hadoop.fs.Path( path 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于大数据项目,SparkHive是非常常用的工具。Spark是一个快速、通用的大数据处理引擎,它提供了丰富的API和内置库,支持在大规模数据集上进行高性能的分布式计算。Hive是一个建立在Hadoop之上的数据仓库工具,它提供了类似于SQL的查询语言HQL,可以方便地对存储在Hadoop集群上的数据进行查询和分析。 在一个大数据项目中,通常会使用Spark进行数据处理和计算,而Hive则用于数据的存储和查询。下面是一个基本的大数据项目流程: 1. 数据采集:从各种数据源(如传感器、日志、数据库等)收集原始数据,并进行清洗和预处理。 2. 数据存储:将处理后的数据存储到合适的存储系统中,如Hadoop分布式文件系统(HDFS)或云存储服务。 3. 数据处理:使用Spark进行数据处理和计算,可以使用Spark的DataFrame和SQL API对数据进行转换、过滤、聚合等操作。 4. 数据分析:使用Hive进行数据的查询和分析,可以通过HQL语言编写复杂的查询,从存储在Hadoop上的数据中提取有用信息。 5. 数据可视化:将分析结果可视化展示,可以使用图、仪板等方式呈现数据分析结果,帮助用户理解和决策。 这只是一个简单的大数据项目流程示例,实际项目中可能还涉及到数据清洗、特征工程、机器学习等其他环节。希望能对您有所帮助!如果您有更具体的问题,欢迎提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值