Spark程序模块化的处理

本文介绍如何使用Apache Spark处理Hive中的数据,包括从Hive读取数据并转换为RDD,将RDD注册为临时表并写回Hive,以及通过case class封装RDD实现数据类型标准化的方法。
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.Row
import org.apache.spark.sql.types.{DoubleType, StringType, StructField, StructType}
import org.apache.spark.{SparkConf, SparkContext}

//1.获取hive数据,并将dataframe转成rdd
val query_hql = "select a,b,c,d from xx.table_name"

val rdd = sqlContext.sql(query_hql).map(row =>
  (row(0).toString.trim,
    row(1).toString.trim.substring(0, row(1).toString.trim.length - 2),
    row(2).toString.trim,
    row(3).toString.trim
    ))

//2.将rdd注册成临时表,并持久化进入hive库
val item_row = rdd.map(x => Row(x._1, x._2, x._3, x._4))
val schema = StructType(
  Array(
    StructField("phone_no", StringType),
    StructField("lat", DoubleType),
    StructField("lon", DoubleType),
    StructField("end_date", StringType)
  )
)
val rdd_df_r = sqlContext.createDataFrame(item_row, schema)
rdd_df_r.registerTempTable("tmp_home")

sqlContext.sql("drop table xx.tmp_aa")
sqlContext.sql("create table xx.tmp_aa as select * from tmp_home")

//3.case class封装rdd,变成schema化的数据类型
case class home_info(phone_date: String, h_time: String, h_lat: Double, h_lon: Double)

// 4.Rdd内部排序
//RDD[(String, List[home_info])] 用home_info对象time字段排序
x._2.sortWith((h1, h2) => h1.h_time > h2.h_time)
//分组内部,使用日期倒序排序
val data_desc_list = line._2.toList.sortWith(_._1 > _._1)

//5.针对大数据集,不要使用groupBy,不要使用groupBy,不要使用groupBy,重要的事说三遍
val phone_date_group_data = phone_date_key_data.groupBy(k => k._1)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值