Spark中SQL与DSL编程风格的使用(附花式查询与单词记数案例)

Spark 中 DataFrame 的常用操作:

1、DSL风格:

简单来说就是 DataFrame 对象调用 API,这些 API 有的和 RDD 同名,有的和 SQL 关键词同名。

调用 DataFrame 中 API 进行数据分析,DataFrame 中涵盖很多函数,大致分类如下:
1、选择函数 select:选取某些列的值
2、过滤函数 filter / where:设置过滤条件,类似 SQL 中 WHERE 语句
3、分组函数 groupBy / rollup  /cube:对某些字段分组,在进行聚合统计
4、聚合函数 agg:通常与分组函数连用,使用一些 count、max、sum 等聚合函数操作
5、排序函数 sort / orderBy:按照某写列的值进行排序(升序 ASC 或者降序 DESC)
6、限制函数 limit:获取前几条数据,类似 RDD 中 take 函数
7、重命名函数 withColumnRenamed:将某列的名称重新命名
8、删除函数 drop:删除某些列
9、增加列函数 withColumn:当某列存在时替换值,不存在时添加此列
上述函数在实际项目中经常使用,尤其数据分析处理的时候,其中要注意,调用函数时,通常指定某个列名称,传递 Column 对象,通过隐式转换转换字符串 String 类型为 Column 对象。

2、SQL风格:

两个步骤:

  • 将 DataFrame 注册成一个
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为你解答这个问题。 首先,我们需要准备好数据。假设我们有一个文本文件`words.txt`,其包含一些单词,每个单词占一行。 接下来,我们可以使用Pycharm创建一个新的Python项目,并在项目创建一个Python文件,例如`word_count.py`。 在代码,我们首先需要导入必要的模块和库,例如: ```python from pyspark.sql import SparkSession from pyspark.sql.functions import split, explode, count ``` 然后,我们可以使用SparkSession创建一个SparkContext对象,例如: ```python spark = SparkSession.builder.appName("WordCount").getOrCreate() ``` 接着,我们可以使用SparkSQLDSL方式来进行单词统计。DSL方式是通过编写代码来操作数据的方式,例如: ```python # 读取数据并创建DataFrame对象 df = spark.read.text("words.txt") # 利用split函数将每行文本拆分为单词 words = df.select(explode(split(df.value, " ")).alias("word")) # 对单词进行分组和计数 wordCounts = words.groupBy("word").agg(count("*").alias("count")) # 打印结果 wordCounts.show() ``` 以上代码,我们首先使用`read.text()`函数读取文本文件,并创建一个DataFrame对象。然后,我们使用`split()`函数将每行文本拆分为单词,并使用`explode()`函数将每个单词拆分为多行。接着,我们使用`groupBy()`函数对单词进行分组,并使用`agg()`函数计算每个单词出现的次数。最后,我们使用`show()`函数打印结果。 除了DSL方式,我们还可以使用SQL方式来进行单词统计。SQL方式是通过编写SQL语句来操作数据的方式,例如: ```python # 通过createOrReplaceTempView函数创建临时表 df.createOrReplaceTempView("words") # 编写SQL语句 sql = """ SELECT word, COUNT(*) AS count FROM ( SELECT explode(split(value, ' ')) AS word FROM words ) GROUP BY word """ # 执行SQL语句并打印结果 wordCounts = spark.sql(sql) wordCounts.show() ``` 以上代码,我们首先使用`createOrReplaceTempView()`函数创建一个临时表,然后编写SQL语句来进行单词统计。SQL语句的`explode()`函数和`split()`函数的作用与DSL方式的相同。最后,我们使用`show()`函数打印结果。 总体来说,SparkSQL可以使用DSL方式和SQL方式来进行数据操作和计算,具有灵活、高效、易用等特点。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇迹虎虎

客官,赏个银子吧,别下次一定了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值