iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spark-Sql的示例分析
  • 660
分享到

Spark-Sql的示例分析

2023-06-21 22:06:31 660人浏览 八月长安
摘要

这篇文章主要介绍spark-sql的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SparkSQL运行架构Spark SQL对SQL语句的处理,首先会将SQL语句进行解析(Parse),然后形成一个Tree,

这篇文章主要介绍spark-sql的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

SparkSQL运行架构

Spark SQL对SQL语句的处理,首先会将SQL语句进行解析(Parse),然后形成一个Tree,在后续的如绑定、优化等处理过程都是对Tree的操作,而操作的方法是采用Rule,通过模式匹配,对不同类型的节点采用不同的操作。

spark-sql是用来处理结构化数据的模块,是入门spark的首要模块。

技术的学习无非就是去了解它的api,但是Spark有点难,因为它的例子和网上能搜到的基本都是Scala写的。我们这里使用Java。

入门例子

数据处理的第一个例子通常都是Word count,就是统计一个文件里每个单词出现了几次。我们也来试一下。

> 这个例子网上有很多,即使是通过spark实现的也不少;这里面大部分都是使用Scala写的,我没有试过;少部分是通过Java写的;

Java里面的例子有一些是使用RDD实现的,只有极个别是通过DataSet来做的。但即使这一小撮例子,我也跑不通。

所以我自己来尝试完成这个例子,看到别人用Scala写三五行就完成了,而我尝试了一整天几无进展。在网上东拼西凑熟悉Spark的Java 

还是以我们前面的例子来改:

String logFile = "words";

SparkSession spark = SparkSession.builder().appName("Simple Application").master("local").getOrCreate();

Dataset<String> logData = spark.read().textFile(logFile).cache();

System.out.println("行数:" + logData.count());这里我不再使用之前的README文件,自己创建了一个words文件,内容随意写了一堆单词。

执行程序,可以正常打印出来:

Spark-Sql的示例分析

接下来我们需要把句子分割成一个个单词合在一起,然后统计每个单词出现的次数。

> 可能有人会说,这个简单,我用Java8的流一下就处理好了:

把行集合通过flatMap处理,每一行通过split(" ")分割成一个独立的单词集合,再把结果通过自身groupBy一下就拿到终止数据结构Map了。

最后把map的key和value的大小拿到就好了。

的确,使用Java就是这样实现。但是Spark提供了一套和Java的流API名字和效果类似的工具,区别是Spark的是分布式API

我们通过Spark的flatMap先来处理一下:

Dataset<String> words = logData.flatMap((FlatMapFunction<String, String>) k -> Arrays.asList(k.split("\\s")).iterator(), Encoders.STRING());System.out.println("单词数:" + words.count());words.foreach(k -> {System.out.println("W:" + k);});

不同于Java的流,spark这个flatMap的返回值是可以直接访问结果的:

Spark-Sql的示例分析

> 可能有人留意到spark中函数式方法的参数定义和Java差距较大。他们的参数不太一样,还多了个编码器。目前来讲我还不清楚为啥这样定义,不过印象中编码器也是spark3的重要优化内容。

再Java中使用Scala的方法总是有些怪异,Lambda表达式前面总是需要强制类型转换,只是为了指明参数类型,否则需要new一个匿名类。

这个也花了我不少时间,后来找到一个网页org.apache.spark.sql.Dataset.flatMap java code examples | Tabnine

Spark-Sql的示例分析

再往后我迷茫了:

KeyValueGroupedDataset<String, String> group = words.groupByKey((Function1<String, String>) k -> k, Encoders.STRING());

这样我已经group好了,但是返回的不是DataSet,我也不知道这个返回有啥用,怎么拿到里面的内容呢?我费了好大劲没搞定。

比如我发现count方法会返回一个DataSet:

Spark-Sql的示例分析

看起来正是我想要的,但是当我想把它输出竟然执行报错:

ount.foreach(t -> {    System.out.println(t);});

Spark-Sql的示例分析

别说foreach了,就算想看看里面的数量(就像一开始我们查看了文件有几行那样)都会报错,错误内容一样

count.count();

查了很多资料,大意是说spark的计算方法都是分布式的,各个任务之间需要通信,通信时需要序列化来传递信息。所以上面我们能看文件行数因为类型是String,有序列化标志;现在生成的是元组,不能序列化。我尝试了各种方法,甚至自己创建新类模拟了计算过程还是不行

Spark-Sql的示例分析Spark-Sql的示例分析

查了好久资料,比如Job aborted due to stage failure: Task not serializable: | Databricks Spark Knowledge Base (gitbooks.io)依然没有解决。偶然的机会找到一个令人激动的网站Spark Groupby Example with DataFrame — SparkByExamples终于解决了我的问题。

使用DataFrame

DataFrame虽然是spark提供的重要工具,但是再Java上并没有对应的类,只是把DataSet的泛型对象改成Row而已。注意这个Row没有泛型定义,所以里面有哪些列不知道

可以从一开始就把DataSet转成DataFrame:

Spark-Sql的示例分析

但是可以看到要从Row里面拿数据比较麻烦。所以目前我只在需要序列化的地方转:

Spark-Sql的示例分析

以上是“Spark-Sql的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Spark-Sql的示例分析

本文链接: https://www.lsjlt.com/news/301196.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spark-Sql的示例分析
    这篇文章主要介绍Spark-Sql的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SparkSQL运行架构Spark SQL对SQL语句的处理,首先会将SQL语句进行解析(Parse),然后形成一个Tree,...
    99+
    2023-06-21
  • Spark Streaming+Spark SQL的数据倾斜示例分析
    这篇文章将为大家详细讲解有关Spark Streaming+Spark SQL的数据倾斜示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.现象 三台机器都有产生executor,每台...
    99+
    2023-06-03
  • macOS Spark 2.4.3 standalone 搭建的示例分析
    本篇文章给大家分享的是有关macOS Spark 2.4.3 standalone 搭建的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。based onjdk 1.8M...
    99+
    2023-06-02
  • Apache Spark SQL入门及实践的实例分析
    Apache Spark SQL入门及实践的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Apache SparkSQL是一个重要的Spark模块,我们...
    99+
    2023-06-02
  • 基于Spark Mllib文本分类的示例分析
    这篇文章将为大家详细讲解有关基于Spark Mllib文本分类的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基于Spark Mllib的文本分类文本分类是一个典型的机器学习问题,其主要目标是通过...
    99+
    2023-06-19
  • spark与kafaka整合workcount示例分析
    今天就跟大家聊聊有关spark与kafaka整合workcount示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。package hgs.spark.streamin...
    99+
    2023-06-02
  • flink和spark Streaming中Back Pressure的示例分析
    这篇文章将为大家详细讲解有关flink和spark Streaming中Back Pressure的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Spark Streaming的back pres...
    99+
    2023-06-19
  • springboot集成spark并使用spark-sql的示例详解
    首先添加相关依赖: <xml version="1.0" encoding="UTF-8"> <project xmlns="http://maven.apache...
    99+
    2024-04-02
  • Spark SQL数据加载和保存的实例分析
    今天就跟大家聊聊有关Spark SQL数据加载和保存的实例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、前置知识详解 Spark SQL重要...
    99+
    2024-04-02
  • SQL注入的示例分析
    这篇文章主要为大家展示了“SQL注入的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SQL注入的示例分析”这篇文章吧。SQL注入攻击的总体思路 ...
    99+
    2024-04-02
  • SQL调优的示例分析
    这篇文章主要为大家展示了“SQL调优的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SQL调优的示例分析”这篇文章吧。环境:Microsoft SQL Server 2016 (SP2-...
    99+
    2023-06-05
  • SQL Server索引的示例分析
    小编给大家分享一下SQL Server索引的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言此文是我之前的笔记整理而来...
    99+
    2024-04-02
  • sql中left join的示例分析
    这篇文章主要为大家展示了“sql中left join的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“sql中left join的示例分析”这篇文章吧。网...
    99+
    2024-04-02
  • SQL Server分页编号的示例分析
    这篇文章给大家分享的是有关SQL Server分页编号的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。今天看书讲T-SQL,看到了UNBOUNDED PRECEDING,...
    99+
    2024-04-02
  • oracle的sql调优的示例分析
    oracle的sql调优的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 查询某个session造成lmode为3的...
    99+
    2024-04-02
  • Spark-Sql入门程序示例详解
    SparkSQL运行架构 Spark SQL对SQL语句的处理,首先会将SQL语句进行解析(Parse),然后形成一个Tree,在后续的如绑定、优化等处理过程都是对Tree的操作,而...
    99+
    2024-04-02
  • SQL中DDL操作的示例分析
    这篇文章给大家分享的是有关SQL中DDL操作的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 1、数据库对象    表&...
    99+
    2024-04-02
  • SQL报错注入的示例分析
    小编给大家分享一下SQL报错注入的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!SQL报错注入概述通过构造特定的SQL语句,让攻击者想要查询的信息(如数据...
    99+
    2023-06-29
  • SQL之各种join的示例分析
    这篇文章将为大家详细讲解有关SQL之各种join的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SQL Left Join, Right Join, Inner Join, and Natural...
    99+
    2023-06-20
  • SQL注入绕过的示例分析
    这篇文章主要介绍了SQL注入绕过的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言sql注入在很早很早以前是很常见的一个漏洞。后来...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作