spark 实战笔记case3

Spark SQL API——使用Case Class创建Dataset package com.njbdqn.mydataset import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions._ /** * 使用dataSet完成零售商店指标统计 * 1、使用RDD装在零售商店业务数据 * customers.csv、orders.csv、order_items.csv、products.csv * 2、定义样例类 * 将RDD转成DataSet */ object 阅读详情
val mapper = sc.textFile("/user/hive/warehouse/sla.db/e*_30days/").map(line => line.split("\073")).map(line => ( if (line(0)=="598017" || line(0)=="614420" || line(0)=="614421") line(5) else line(4), ( line(0), line(2).substring(0, 19) ) ))

def filterSLA ( events:Seq[(String,String)] ): Boolean = {
  val eventMap = events.sortBy(_._2).toMap
  if (eventMap contains "614401") {
    val format = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    val ts_614401 = format.parse(eventMap("614401")).getTime
    if (eventMap contains "401411") {
      val ts_401411 = format.parse(eventMap("401411")).getTime
      if (ts_401411 - ts_614401 > 10*60*1000) return true
    }
    if (eventMap contains "393217") {
      val ts_393217 = format.parse(eventMap("393217")).getTime
      if (ts_393217 - ts_614401 > 60*60*1000) return true
    }
    if (eventMap contains "614405") {
      val ts_614405 = format.parse(eventMap("614405")).getTime
      if (ts_614405 - ts_614401 > 48*60*60*1000) return true
    }
    return false
  } else {
    return false
  }
}

def flatValues ( events:Seq[(String,String)] ): String = {
  val eventMap = events.sortBy(_._2).toMap
  return (if (eventMap contains "614401") eventMap("614401") else "NULL") + "\t" + (if (eventMap contains "401411") eventMap("401411") else "NULL") + "\t" + (if (eventMap contains "393217") eventMap("393217") else "NULL") + "\t" + (if (eventMap contains "614405") eventMap("614405") else "NULL")
}

mapper.groupByKey.filter( kv => filterSLA(kv._2.toSeq) ).map( kv => kv._1 + "\t" + flatValues(kv._2.toSeq) ).saveAsTextFile("/tmp/opt")
import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor}
import org.apache.hadoop.hbase.mapreduce.TableInputFormat

import org.apache.spark.rdd.NewHadoopRDD

val conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE, "tmp")

var hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result])

hBaseRDD.count()

import scala.collection.JavaConverters._

hBaseRDD.map(tuple => tuple._2).map(result => result.getColumn("cf".getBytes(), "val".getBytes())).map(keyValues => {
( keyValues.asScala.reduceLeft {
    (a, b) => if (a.getTimestamp > b.getTimestamp) a else b
  }.getRow,
  keyValues.asScala.reduceLeft {
    (a, b) => if (a.getTimestamp > b.getTimestamp) a else b
  }.getValue
)
}).take(10)

hBaseRDD.map(tuple => tuple._2).map(result => (result.getRow, result.getColumn("cf".getBytes(), "val".getBytes()))).map(row => {
(
  row._1.map(_.toChar).mkString,
  row._2.asScala.reduceLeft {
    (a, b) => if (a.getTimestamp > b.getTimestamp) a else b
  }.getValue.map(_.toChar).mkString
)
}).take(10)


conf.set(TableInputFormat.INPUT_TABLE, "test1")

//var hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result])

hBaseRDD.map(tuple => tuple._2).map(result => (result.getRow, result.getColumn("lf".getBytes(), "app1".getBytes()))).map(row => if (row._2.size > 0) {
(
  row._1.map(_.toChar).mkString,
  row._2.asScala.reduceLeft {
    (a, b) => if (a.getTimestamp > b.getTimestamp) a else b
  }.getValue.map(_.toInt).mkString
)
}).take(10)

import java.nio.ByteBuffer
hBaseRDD.map(tuple => tuple._2).map(result => (result.getRow, result.getColumn("lf".getBytes(), "app1".getBytes()))).map(row => if (row._2.size > 0) {
(
  row._1.map(_.toChar).mkString,
  ByteBuffer.wrap(row._2.asScala.reduceLeft {
    (a, b) => if (a.getTimestamp > b.getTimestamp) a else b
  }.getValue).getLong
)
}).take(10)


//conf.set(TableInputFormat.SCAN_COLUMN_FAMILY, "lf")
conf.set(TableInputFormat.SCAN_COLUMNS, "lf:app1")

//var hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result])

import java.nio.ByteBuffer
hBaseRDD.map(tuple => tuple._2).map(result => {
  ( result.getRow.map(_.toChar).mkString,
    ByteBuffer.wrap(result.value).getLong
  )
}).take(10)


val conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE, "test1")

var hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result])

var rows = hBaseRDD.map(tuple => tuple._2).map(result => result.getRow.map(_.toChar).mkString)
rows.map(row => row.split("\\|")).map(r => if (r.length > 1) (r(0), r(1)) else (r(0), "") ).groupByKey.take(10)
Spark简单数据分析---Spark学习笔记(2) 上次学习Spark还是两个月前的事情,期中好多事情耽搁了,现在开始正式地学习Spark的使用。前面所学习的Scala基本知识也能用上了,终于可以从简单了解过渡到应用和实现的阶段。 这次学习的内容跟进的是《Spark高技术据分析》一章,里面的内容感觉很灵活,不仅是从最简单的Spark对数据的处理开始,而且其中稍带的Scala知识提及,可以加深对Scala的印象,从而运用起来就更加能了解其 阅读详情

相关推荐

Spark 3.x 集成 Kafka 0-10 实战:解决 NoClassDefFoundError 的 2 种方案

本文详细解析了Spark 3.x与Kafka 0.10+集成时常见的NoClassDefFoundError问题,提供了动态依赖加载和手动依赖管理两种高效解决方案。通过实战代码示例和版本兼容性检查表,帮助开发者快速构建稳定的流式数据处理管道,优化Spark与Kafka的整合性能。

weixin_30776545的博客 435

spark case关键字详解

spark中case关键字,很有用,很强大,case语法与java中的switch语法类似,但比switch更强大。 一、case做模式匹配 1.正则匹配 val Pattern="(a.*)".r// val v1="spark"; val r=v1 match { case Pattern(v1)=> "start" case "1"=&...

a627082796的博客 5949

spark-db-case-class:将Spark DB名称映射到case类中的字段

spark-db-case-class:将Spark DB名称映射到case类中的字段

Spark Session Case语句实战

CASE语句是SQL中用于在查询中进行条件判断和返回不同值的语句。CASE:表示开始CASE语句。WHEN:用于指定条件判断的部分,可以有多个WHEN来表示不同的条件。THEN:当条件满足时返回的值。ELSE:如果所有的WHEN条件都不满足,则返回ELSE后面指定的值。END:表示CASE语句的结束。在Spark中,使用CASE WHEN语句可以在DataFrame或Dataset的selectExpr方法中进行条件判断和值返回,从而实现数据的转换和处理。

yanzhenjinghong的博客 294

储能电站 BMS 与车载动力电池 BMS 核心差异:工况、保护策略、控制逻辑对比

储能电站BMS与车载动力电池BMS虽同名,实为针对不同赛道量身定制的产品。简单地将车载BMS方案套用于储能,或将储能BMS思路用于车载,都可能带来性能、安全或成本上的严重问题。在选择和设计BMS时,必须回归其应用场景的本质需求储能BMS是**“资产管理者”**,精打细算,追求在长达十余年的服役期内稳定、高效地创造收益。车载BMS是**“性能与安全卫士”**,反应敏捷,确保在车辆全生命周期内动力澎湃且万无一失。

小帽子的博客 423

蒙特卡洛+概率潮流!基于蒙特卡洛和新能源出力模拟的概率潮流分布程序代码!

最后,导出光照强度、风速、网损和节点电压的概率分布图,并计算了各节点电压和网损的平均值和方差,展示了接入前后的节点电压对比图。在不确定性增加的电力系统中,概率潮流成为含随机因素规划问题的求解前提,可以更加真实地反映电力系统的全面信息。此外,概率潮流还可用于研究风电和光伏发电出力以及电动汽车消耗功率和向电力系统反向供电功率的不确定性对电力系统的影响,发现系统运行中的潜在风险,为系统运行控制提供参考。概率潮流的目的是揭示电网中随机变量对系统的影响,发现电网中的薄弱环节,为规划和调度部门的决策提供有价值的信息。

weixin_48747334的博客 1921

scala语言中case关键字的三种用途,以及在spark中的一种特殊用法

在scala中,case关键字有多种用途 可以用作模式匹配,例如 var arr = Array(1,2,3,4,5,6) arr.foreach(i => { case 1 => println("==1") case _ => println("!=1") }) 可以使用在类class前面声明为case class class之前添加case可以自动生成equal、hashcode、toString、copy方法和他的伴

vic_torsun的博客 7098

超过4.2万个AOI(地理围栏),深圳市2025年2月15日更新的全类别AOI,矢量图层(全国22个超大特大城市AOI更新系列)

超过4.2万个AOI(地理围栏),深圳市2025年2月15日更新的全类别AOI,矢量图层(全国22个超大特大城市AOI更新系列)

1072

《深入理解Spark》之使用scala开发spark时,map+case结构使用技巧

scala开发Spark程序时使用map +case结构的一点小技巧   people.txt文本如下 lyzx1,19 lyzx2,20 lyzx3,21 lyzx4,22 lyzx5,23 lyzx6,24 lyzx7,25 lyzx7,25,哈哈 托塔天王 package com.lyzx.start import org.apache.spark.{SparkConf, Sp...

凌夜知惜 5544

VSCode+Keil高效开发STM32:Keil Assistant插件配置全攻略

本文详细介绍了如何通过VSCode的Keil Assistant插件,将Keil MDK的编译调试能力与VSCode的现代编辑体验相结合,打造高效的STM32开发环境。文章涵盖了从环境配置、工程导入、智能提示设置到与STM32CubeMX协同工作的全流程攻略,旨在解决Keil编辑器效率低下的痛点,大幅提升嵌入式开发的编码与项目管理效率。

gold的博客 508

VM与欧姆龙PLC通讯设置:Fins TCP/UDP协议实战避坑指南

本文详细解析了VM视觉平台与欧姆龙PLC通过Fins TCP/UDP协议进行通讯的实战配置与避坑要点。文章对比了Fins TCP与Fins UDP的差异,推荐在多数工业控制场景下优先选用Fins TCP以保证可靠性,并深入讲解了网络设置、寄存器地址映射、轮询优化等核心配置步骤。同时,针对常见的多次触发拍照、数据解析错误等问题提供了具体的解决方案和调试技巧,旨在帮助工程师快速建立稳定高效的通讯连接。

e4f5g6h7的博客 596

Spark基础知识20_Scala遍历操作,map和flatMap操作、fliter、reduce、fold

对lambda表达式含义的解释--->遍历到的元素赋值给s,然后让s去执行后续方法,这样就可以一个一个转换掉,此例中,会把值给s,然后执行.toUpperCase方法,然后再遍历,再执行下去.朗母达表达式,匿名函数case模式匹配,kv._1表示匹配的键,kv._2表示的匹配的值,这是元组的表达方式,这些遍历方法都可以去尝试。10 作为初始的s ,10 * 1,10 * 2, 20 * 3 ,60 * 4,240 *5。这些元素就构成了很大的集合,得到非常多的元素构成的整体的集合,就是我们所要的结果。

Matrix70的博客 1684

迟滞比较器原理及计算

为什么要用迟滞比较器 在讲迟滞比较器之前,我们先看一个案例。 在产品设计中常常需要用到电机,而电机在从运转到停止过程中需要泄放能量,这种能量大部分以电压的形式反馈回电源母线(Vbus)导致Vbus母线电压升高,特别是功率大又转速快的电机需要急刹时,产生的反馈电压更高,严重时可能导致母线上其他器件的损坏。 为了防止将电机反馈的能量泄放掉,我们需要设计一个电路来检测母线电压,当母线电压高于某一安全阈值时,打开MOSFET Q1将母线上的能量通过电阻R5以热的形式消耗掉。 假如用一般的比较器,设计如下: Vbu

sinat_15677011的博客 2万+

Spark之CASE...WHEN...THEN...的两种实现方式

在Spark中,dataframe是常用的数据格式,类似于数据库中的表。本文将介绍如何在dataframe中实现CASE…WHEN…THEN的两种方法。 一种是将dataframe看成数据库中的表,即使用createOrReplaceTempView()函数,之后利用数据库的CASE…WHTN…THEN进行操作。另一种方法是,利用pyspark.sql.functions的when().othe...

liuxiangke0210的专栏 5857

华为OD新系统机试真题 - 准备生日礼物(Py/Java/C/C++/Js/Go)

华为OD机试新系统真题 4.8【准备生日礼物】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【准备生日礼物】

qq_45776114的博客 1484

Ubuntu 22.04+/WSL2 中解决 `error: externally-managed-environment` 并成功安装 PyTorch + vLLM 的完整指南

Ubuntu 22.04+/WSL2 因遵循 PEP 668 规范,系统 Python 被标记为“外部管理”,导致直接使用 pip install 安装包时报错 externally-managed-environment。解决方案是创建虚拟环境: 通过 python3 -m venv ~/vllm-env 创建隔离环境 激活环境后安装 PyTorch(CUDA 12.1)和 vLLM 避免使用 sudo pip 或 --break-system-packages,防止破坏系统依赖 关键点: 虚拟环

刘一说的IT专栏 298

spark 实战笔记case1

val tt1 = Array( ("1", ( "t1", "2014-03-01 00:00:00.000+01") ), ("1", ( "t1", "2014-03-01 00:01:00.000+01") ), ("2", ( "t1", "2014-03-02 00:00:00.000+01") ), ("2", ( "t1", "2014-03-03 00:00:00.000+01")

mllhxn的专栏 538

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

scala中json与case class对象的转换, spark读取es json转换成case class

ilinux_one scala中json与对象的转换 遇到的问题 因为要把spark从es读出来的json数据转换为对象,开始想用case class定义类型,通过fastjson做转换。如下 复制代码 复制代码 case class Book (author: String, content: String, id: String, time: Long, title: String) v...

xjxjin的博客 3303

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

spark 实战笔记case2

val t1 = sc.textFile("/tmp/db_case1/order_created/*").map(line => line.split("\t")) val t2 = sc.textFile("/tmp/db_case1/order_picked/*").map(line => line.split("\t")) val t3 = sc.textFile("/tmp/db_case

mllhxn的专栏 530

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spark入门实战系列--6.SparkSQL(下)--Spark实战应用

SparkSQL引入了一种新的RDD——SchemaRDD,SchemaRDD由行对象(Row)以及描述行对象中每列数据类型的Schema组成;SchemaRDD很象传统数据库中的表。SchemaRDD可以通过RDD、Parquet文件、JSON文件、或者通过使用hiveql查询hive数据来建立。SchemaRDD除了可以和RDD一样操作外,还可以通过registerTempTable注册成临时表,然后通过SQL语

yirenboy的专栏 4336

Spark SQL 学习笔记

目录 SQLContext 1.初始化SparkContext命令 2.创建SQLContext命令: (1)Spark中使用toDF函数创建DataFrame (2)创建Case Class (3)使用选择(select)方法 (4)过滤器(filter)方法 (5)分组(groupby)方法 (6)将DataFrame数据存储在表中 (7)表上传递sql查询 显示...

Vulpes corsac 766

Spark-sql 通过case class、class和StructType的方式创建DataFrame

1.通过case class 的方式创建DataFrame laozhao,18,9999.99 laoduan,30,99.99 xuance,28,99.99 yeqing,25,99.0 dezhi,24,99.9 libai,88,50.0 banzang,29,50.6 import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame,.

m0_46538284的博客 3781

spark-sql case when 问题

SELECT CASE (pmod(datediff(f0.`4168388__c_0`,'1970-01-04'),7)+1) WHEN '1' THEN '星期日' WHEN '2' THEN '星期一' WHEN '3' THEN '星期二' WHEN '4' THEN '星期三' WHEN '5' THEN '星期四' WHEN '6' THEN '星期五' WHE...

weixin_34127717的博客 2512

Spark AQE DataSkew 处理过程中考虑的一些Case

Spark AQE 在 DataSkew 处理过程中,需要考虑一些边界条件,否则可能会引入一些额外的Shuffle。 EnsureRequirements 在开始今天的Topic之前,需要先回顾一下 EnsureRequirements, 熟悉的同学请跳过。 EnsureRequirements 是为了保证Spark 算子的数据输入要求,在算子之间引入Shuffle的核心工具。 outputPartitioning 算子的 Partitioning 表示该算子的数据在集群上是如何分布的。 SparkPla

半日闲的博客 2070

SparkSQL 中 CASE WHEN 的使用

在数据处理和分析中,CASE WHEN 语句是 SQL 中的一种条件表达式,广泛应用于各种数据库和分析框架中,包括 Spark SQL。本文详细介绍了如何在 Spark SQL 中使用 CASE WHEN 语句来根据不同条件执行数据转化。通过多个实际案例,我们展示了如何使用 CASE WHEN 进行条件判断、结合聚合函数进行条件统计,并探讨了嵌套使用和性能优化注意事项。无论是分类数据、计算销售额区间,还是在复杂的查询中灵活应用,CASE WHEN 都能显著提高你的数据处理效率。掌握它,能够帮助你在实际的数据

WoodyBruant的博客 1197
上一篇: spark 实战笔记case2
下一篇: spark 实战笔记case4
mllhxn
博客等级 码龄14年 116粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值