PySpark数据处理与分析技巧

41、修改 word_count_submit.py 脚本,使其返回给定文本文件中仅出现一次的五个单词样本。

可按以下思路修改脚本:

  1. 读取文本文件
  2. 对文本进行分词、清理(去除标点、转换为小写等)
  3. 统计每个单词的出现次数
  4. 筛选出仅出现一次的单词
  5. 最从中随机抽取五个单词

42、使用子字符串函数,返回最常见的前五个首字母(仅保留每个单词的首字母)。

可通过以下步骤实现:

  1. 使用 substring 函数提取每个单词的首字母;
  2. 对首字母进行分组;
  3. 统计每个首字母的出现次数;
  4. 按照出现次数降序排序;
  5. 取前五个结果。

示例代码如下:

from pyspark.sql import SparkSession
from pyspark.sql.functions import substring, col

# 创建 SparkSession
spark = SparkSession.builder.appName('TopFirstLetters').getOrCreate()

# 假设 words_nonull 是已有的 DataFrame,包含 'word' 列
words_nonull = spark.createDataFrame([('apple',), ('banana',), ('cherry',), ('date',), ('elderberry',), ('fig',), ('grape',), ('honeydew',), ('kiwi',), ('lemon',)], ['word'])

# 提取每个单词的首字母
first_letters = words_nonull.select(substring(col('word'), 1, 1).alias('first_letter'))

# 分组并统计每个首字母的出现次数
letter_counts = first_letters.groupBy('first_letter').count()

# 按出现次数降序排序并取前五个
top_five_letters = letter_counts.orderBy(col('count').desc()).limit(5)

# 显示结果
print(top_five_letters.show())

43、创建一个新的数据框 logs_clean,其中只包含不以 ID 结尾的列。假设已有一个名为 logs 的数据框。

可使用如下代码实现:首先获取不以 ID 结尾的列名列表,然后使用 select 方法选择这些列创建新的数据框。示例代码如下:

# 获取不以 ID 结尾的列名
columns_to_keep = [col for col in logs.columns if not col.endswith('ID')]

# 创建新的数据框
logs_clean = logs.select(*columns_to_keep)

44、在 commercials.py 返回的数据框中,根据每个频道的 commercial_ratio 将其划分到不同的区间,并返回每个区间内的频道数量。(提示:查看 round 函数的文档以了解如何对值进行四舍五入。)

使用 round 函数对 commercial_ratio 进行四舍五入:

rounded_ratio = round(commercial_ratio)

然后根据四舍五入后的值进行分组:

grouped_channels = channels.groupby(rounded_ratio)

最后统计每个组内的频道数量:

channel_count = grouped_channels.size()

45、考虑到在数据框中也使用句点或方括号来访问层级实体,为什么在列名中使用它们是个坏主意?

一般来说,在列名中使用句点或方括号会造成混淆,因为这些符号通常用于访问嵌套结构中的子字段,可能导致代码难以理解和维护,也可能在解析列名时引发错误。

46、虽然不太常见,但你可以从字典创建数据框。由于字典与JSON文档非常接近,请构建用于导入以下字典的模式(这里JSON或PySpark模式均有效)。字典为 {‘one’: 1, ‘two’: [1,2,3]},使用该模式创建数据框的代码示例为 spark.createDataFrame([{“one”: 1, “two”: [1,2,3]}], schema=dict_schema) 。

import pyspark.sql.types as T
dict_schema = T.StructType([
    T.StructField('one', T.IntegerType(), True),
    T.StructField('two', T.ArrayType(T.IntegerType()), True)
])

47、使用 three_shows 计算每个节目第一集和最后一集之间的时间间隔。哪个节目持续时间最长?


                
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值