Java进阶示例

使用DataFrame和SQL查询处理数据

在Spark中,DataFrame是一种以结构化方式处理数据的强大工具,它允许用户以类似于SQL的方式操作数据,提供了比RDD更高的抽象层次和更好的性能。下面的示例将展示如何使用Spark SQL的DataFrame API来读取CSV数据,执行查询,并保存结果。

Java代码示例:

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;public class SparkSQLDataFrameExample {public static void main(String[] args) {// 创建SparkSessionSparkSession spark = SparkSession.builder().appName("Spark SQL DataFrame Example").master("local") // 使用本地模式运行,实际部署时可修改为集群模式.getOrCreate();// 加载CSV文件到DataFrameDataset<Row> df = spark.read().option("header", "true") // 表示第一行为列名.option("inferSchema", "true") // 自动推断每列的数据类型.csv("path/to/your/csv/file.csv");// 显示DataFrame的前几行数据df.show(5);// 执行SQL查询Dataset<Row> sqlDF = spark.sql("SELECT * FROM df WHERE column_name > 100"); // 注意:直接使用表名df可能不起作用,Spark可能要求先注册DataFrame为临时视图df.createOrReplaceTempView("data_view");sqlDF = spark.sql("SELECT * FROM data_view WHERE column_name > 100");// 显示查询结果sqlDF.show();// 将结果保存为新的CSV文件sqlDF.write().format("csv").option("header", "true").save("path/to/save/new/csv");// 停止SparkSessionspark.stop();}
}

在这个示例中,我们首先创建了一个SparkSession,这是使用Spark SQL的入口点。接着,我们使用read()方法加载了一个CSV文件,并通过选项指定了文件的第一行包含列名,并让Spark自动推断每列的数据类型。然后,我们展示了如何查看DataFrame的部分内容,并通过SQL查询筛选出满足特定条件的记录。最后,我们将查询结果保存为了一个新的CSV文件。

请注意,实际应用中需要将"path/to/your/csv/file.csv""path/to/save/new/csv"替换为实际的文件路径。此外,根据你的具体需求,可能还需要调整option参数和SQL查询语句。

实时数据流处理

Apache Flink 是一个用于处理无界和有界数据流的开源流处理框架,支持高吞吐、低延迟的实时处理。下面的示例将展示如何使用Flink的Java API来实现一个简单的实时数据流处理任务,即计算一个文本数据流中每个单词出现的次数。

Java代码示例:

首先,确保你已安装并配置了Apache Flink环境。

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;public class FlinkWordCount {public static void main(String[] args) throws Exception {// 设置执行环境final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 创建数据流,这里假设从标准输入读取数据(例如通过命令行输入或nc命令发送)DataStream<String> text = env.socketTextStream("localhost", 9999);// 定义转换操作DataStream<Tuple2<String, Integer>> counts =// 将文本行切分为单词text.flatMap(new Tokenizer())// 分组并计数.keyBy(0).sum(1);// 打印结果到控制台,并设置并行度为1以简化输出counts.print().setParallelism(1);// 执行任务env.execute("Flink WordCount Example");}// 实现FlatMapFunction接口,用于将文本行切分为单词public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {@Overridepublic void flatMap(String value, Collector<Tuple2<String, Integer>> out) {// 将每一行切分为单词,并为每个单词生成一个(单词,1)的Tuplefor (String word : value.split("\\W+")) {if (!word.isEmpty()) {out.collect(new Tuple2<>(word, 1));}}}}
}

此示例展示了如何使用Flink创建一个流处理作业,从网络套接字(例如通过nc -lk 9999命令发送文本数据到本地9999端口)读取文本数据流,对文本行中的单词进行计数,并将结果打印到控制台。Tokenizer类实现了FlatMapFunction,负责将输入的文本行切分成单词并生成对应的键值对,之后通过keyBy操作对相同的单词进行分组,并使用sum聚合函数计算每个单词的总数。

请确保在运行此示例之前启动了一个向指定端口发送数据的服务,或者根据实际情况调整数据源。

Spring Boot RESTful API 示例

接下来,我们将创建一个简单的Spring Boot应用程序,该程序提供一个RESTful API来管理书籍信息,包括书籍的增删改查功能。这将展示Spring Boot框架在快速构建Web服务方面的强大能力。

Java代码示例:

首先,确保你的开发环境已经配置了Spring Boot,可以使用Spring Initializr来快速启动项目,选择Web依赖。

  1. 创建Book实体类 (src/main/java/com/example/demo/model/Book.java)
package com.example.demo.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class Book {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long id;private String title;private String author;// 省略getter和setter方法
}
  1. 创建BookRepository接口 (src/main/java/com/example/demo/repository/BookRepository.java)
package com.example.demo.repository;import com.example.demo.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
}
  1. 创建BookService类 (src/main/java/com/example/demo/service/BookService.java)
package com.example.demo.service;import com.example.demo.model.Book;
import com.example.demo.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Optional;@Service
public class BookService {private final BookRepository bookRepository;@Autowiredpublic BookService(BookRepository bookRepository) {this.bookRepository = bookRepository;}public List<Book> findAll() {return bookRepository.findAll();}public Optional<Book> findById(Long id) {return bookRepository.findById(id);}public Book save(Book book) {return bookRepository.save(book);}public void deleteById(Long id) {bookRepository.deleteById(id);}
}
  1. 创建BookController类 (src/main/java/com/example/demo/controller/BookController.java)
package com.example.demo.controller;import com.example.demo.model.Book;
import com.example.demo.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/api/books")
public class BookController {private final BookService bookService;@Autowiredpublic BookController(BookService bookService) {this.bookService = bookService;}@GetMappingpublic ResponseEntity<List<Book>> getAllBooks() {List<Book> books = bookService.findAll();return ResponseEntity.ok(books);}@GetMapping("/{id}")public ResponseEntity<Book> getBookById(@PathVariable Long id) {return bookService.findById(id).map(ResponseEntity::ok).orElse(ResponseEntity.notFound().build());}@PostMappingpublic ResponseEntity<Book> createBook(@RequestBody Book book) {Book savedBook = bookService.save(book);return ResponseEntity.ok(savedBook);}@PutMapping("/{id}")public ResponseEntity<Book> updateBook(@PathVariable Long id, @RequestBody Book book) {if (!bookService.existsById(id)) {return ResponseEntity.notFound().build();}book.setId(id);Book updatedBook = bookService.save(book);return ResponseEntity.ok(updatedBook);}@DeleteMapping("/{id}")public ResponseEntity<Void> deleteBook(@PathVariable Long id) {if (!bookService.existsById(id)) {return ResponseEntity.notFound().build();}bookService.deleteById(id);return ResponseEntity.noContent().build();}
}

这个示例中,我们定义了一个简单的书籍模型Book,使用Spring Data JPA的BookRepository来处理数据库交互,通过BookService层封装业务逻辑,最后在BookController中定义了与书籍相关的HTTP端点,实现了CRUD操作。要运行这个应用,只需启动主类(通常包含@SpringBootApplication注解),然后你可以通过Postman或类似工具来测试这些API端点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker安装消息队列mq中的rabbit服务

在现代化的分布式系统中&#xff0c;消息队列&#xff08;Message Queue, MQ&#xff09;已经成为了一种不可或缺的组件。RabbitMQ作为一款高性能、开源的消息队列软件&#xff0c;因其高可用性、可扩展性和易用性而广受欢迎。本文将详细介绍如何在Docker环境中安装RabbitMQ服务…

2024.6.18 刷题总结

2024.6.18 **每日一题** 2288.价格减免&#xff0c;这是一道纯字符串的题目&#xff0c;我们的目标是识别出字符串中的价格并将它替换为折扣后的数字。这道题利用了一些字符串的关键字&#xff1a; stringstream 是C标准库中的一个类&#xff0c;属于 <sstream> 头文件…

八股系列 Flink

Flink 和 SparkStreaming的区别 设计理念方面 SparkStreaming&#xff1a;使用微批次来模拟流计算&#xff0c;数据已时间为单位分为一个个批次&#xff0c;通过RDD进行分布式计算 Flink&#xff1a;基于事件驱动&#xff0c;是面向流的处理框架&#xff0c;是真正的流式计算…

网络学习(13)|Spring Boot中获取HTTP请求头(Header)内容的详细解析

文章目录 方法一&#xff1a;使用HttpServletRequest实现原理代码示例优点缺点适用场景 方法二&#xff1a;使用RequestContextHolder实现原理代码示例优点缺点适用场景 方法三&#xff1a;使用RequestHeader注解实现原理代码示例优点缺点适用场景 总结 在Spring Boot应用中&am…

访问学者谈CSC青年骨干教师项目出国经历及感受

CSC青年骨干教师出国研修项目实施已近20年&#xff0c;越来越多的青年教师成为该项目的受益者。知识人网小编推荐该项目资助老师谈谈在加拿大卡尔加里大学访学一年的经历及感受。 国家留学基金委&#xff08;以下简称CSC&#xff09;高等学校青年骨干教师出国研修项目&#xff…

41、商城系统(二十二):Sentinel实现熔断、降级、限流

目录 一、熔断、降级、限流 1.什么是熔断 2.什么是降级 3.什么是限流 二、整合Sentinel初体验 1.引入依赖 2.官网下载dashboard可视化页面 3.配置参数 4.启动服务 三、实时监控没数据,流控响应结果自定义 1.实时监控没有数据 2.自定义流控返回结果 四、解决rabbi…

弹性云是否支持按量计费?

一、什么是弹性云&#xff1f; 弹性云&#xff0c;顾名思义&#xff0c;是一种能够根据用户需求动态调整计算资源的云计算服务。它打破了传统IT架构的束缚&#xff0c;通过虚拟化技术将物理资源转化为可灵活调配的虚拟资源&#xff0c;从而实现了计算资源的弹性扩展与缩减。这…

SQL: 将一个表中查出来数据插入到另一个表中

SQL&#xff1a; 将一个表中查出来数据插入到另一个表中 表数据字段不同&#xff1a; insert into A(a,b,c) (select a,b,c from B);表数据字段相同&#xff1a; insert into A select * from B;A是一个表 B是一个表 a,b,c是字段 2、假如A表不存在 select a,b,c into A fro…

个股期权有哪些股票?金融新手必须知道!

今天带你了解个股期权有哪些股票&#xff1f;在中国的股票市场中&#xff0c;个股期权是一种衍生品&#xff0c;允许投资者购买或卖出特定股票的期权合约。 个股期权有哪些股票&#xff1f; 个股期权是指在特定时间内&#xff0c;以特定价格买入或卖出特定数量的某只个股的权利…

lombok.jar包,解决 java: 找不到符号 符号: 类 __

打开设置在这里添加这样一小句话. -Djps.track.ap.dependenciesfalse

赛氪网荣膺“创新型中小企业”称号,科技创新再显卓越实力

近日&#xff0c;北京市经济和信息化局揭晓了2024年度3月份北京市创新型中小企业的光荣名单&#xff0c;其中北京环球赛乐科技有限公司&#xff08;简称赛氪网&#xff09;脱颖而出&#xff0c;再度展现其在创新领域的卓越实力&#xff01; 作为早已跻身“高企之光”行列的佼佼…

COUNTIF函数除计数,还可排序哦

COUNTIF函数除统计个数外&#xff0c;还可以排序哦&#xff01; 近期工作中遇到一个场景“对不同类型的人员按办理量进行排序”&#xff0c;前期只是对同一种类型进行排序&#xff0c;经过查阅资料&#xff0c;可以用COUNTIF函数解决问题&#xff0c;今天就把COUNTIF函数的用法…

CORE公链

CORE公链采用了结合了工作量证明&#xff08;Proof of Work&#xff0c;PoW&#xff09;和委托权益证明&#xff08;Delegated Proof of Stake&#xff0c;DPoS&#xff09;的共识机制。具体来说&#xff0c;CORE公链利用了比特币的PoW算法来确保网络的安全性&#xff0c;同时引…

EarMaster pro 7 For Mac软件下载-EarMaster Pro(音乐赏析进阶专业版)V6.1下载附加详细安装步骤

EarMaster pro 7 For Mac最新版是一款相当专业的听力训练和音乐理论练习软件&#xff0c;这个EarMaster pro 7 For Mac版带来了全的操作界面&#xff0c;并且更新了课程信息&#xff0c;内置了2000多种课程供用户选择&#xff0c;可以用于听耳训练、视唱和节奏训练等操作。 安 …

视频太大了怎么缩小内存

我们在分享视频的时候&#xff0c;有时候会遇到过视频文件太大&#xff0c;无法发送或者上传的情况&#xff0c;别担心&#xff0c;今天我就来给大家分享一个简单有效的方法&#xff0c;让你的视频变得更小&#xff0c;更方便分享&#xff01; 打开 “51视频处理官网 的网站。上…

Python面试题-2

21. 如何在Python中实现模块导入&#xff1f; 在Python中&#xff0c;模块导入是通过使用import语句来实现的。模块可以是Python文件、包含Python代码的库或包。导入模块后&#xff0c;你可以使用模块名来访问其中的函数、类和变量。 以下是一个简单的例子&#xff0c;说明如…

创建activity中的context

performLaunchActivity的时候获取final int displayId ActivityClient.getInstance().getDisplayId(r.token)&#xff0c;调用createDisplayContext创建context frameworks/base/core/java/android/app/ActivityThread.java ActivityThread.performLaunchActivity()ContextIm…

学校分体空调集控系统

学校分体空调集控系统是一种先进的温度控制解决方案&#xff0c;它主要针对学校等公共场所的空调管理需求而设计。该系统通过集中控制和管理多台分体空调设备&#xff0c;实现了更高的能效、更便捷的操作和更舒适的室内环境。 需求与挑战&#xff1a;学校教学楼、办公楼、实验楼…

智能血糖仪的条码二维码读取设备选型经验分享

智能科技的快速发展&#xff0c;推动医疗辅助设备朝着更加智能、操作更便捷的方向发展&#xff0c;便携式血糖仪已经成为糖尿病患者日常监测血糖的重要工具&#xff0c;但传统血糖仪的检测结果需要用户自己判断&#xff0c;缺乏数据分析很容易出错&#xff0c;而便携式智能血糖…

为啥找对象千万别找大厂男,还好我不是大厂的。。

网上看到一大厂女员工发文说&#xff1a;找对象千万别找大厂男&#xff0c;理由说了一大堆&#xff0c;无非就是大厂男为了逃避带娃&#xff0c;以加班为由宁愿在工位上玩游戏也不愿回家。当然这种观点有的人赞同有的人反对。 网友精彩评论&#xff1a; --------------下面是今…