Spark练习json文件-统计问答数据

目录

题目

准备数据 

 分析数据

实现数据

总结


题目

  1. 计算不同分类的问题数量
  2. 统计问题中的热搜词,并获取top10的热搜词

准备数据 

将数据上传到hdfs上

 分析数据

读取数据

from pyspark import SparkContext
import json
import jieba

sc = SparkContext()

# 读取hdfs数据
rdd = sc.textFile('hdfs://node1:8020/data/baike_qa_valid.json')

对每行的json字符串转换为字典

# 对每行的json字符串转为字典
rdd_dict = rdd.map(lambda x:json.loads(x))
print(rdd_dict.take(1))

第一问:计算不同分类的问题数量

# 计算不同分类的问题数量
rdd_kv = rdd_dict.map(lambda x:(x['category'],1)).reduceByKey(lambda x,y:x+y)

res3 = rdd_kv.collect()
print(res3)

第二问:统计问题中的热搜词,并获取top10的热搜词

1-对title中的数据分词

# # 1-对title中的数据分词
rdd_cut = rdd_dict.map(lambda x:list(jieba.cut(x['title'])))
print(rdd_cut.take(10))

2-将这些数据合并成一个单一的序列

# # 2-将这些数据合并成一个单一的序列
rdd_flatmap = rdd_cut.flatMap(lambda x:x)
print(rdd_flatmap.take(20))

3-只保留长度大于1的单词

# # # 3-筛选条件,只保留长度大于1的单词
rdd_filter = rdd_flatmap.filter(lambda x:len(x)>1)
print(rdd_filter.take(10))

4-将每个单词转换成键值对

# # 4-将每个单词转换成键值对
rdd_map = rdd_filter.map(lambda x:(x,1))
print(rdd_map.take(10))

5-对键值对进行聚合

# # 5-对键值对进行聚合
rdd_reduce = rdd_map.reduceByKey(lambda x,y:x+y)
print(rdd_reduce.take(10))

6-对最后的数据进行排名,取出top10

# # 6-对数据进行排序
rdd_sort = rdd_reduce.sortBy(lambda x:x[1],ascending=False)
print(rdd_sort.take(10))

实现数据

第一种:一步一步分开写

from pyspark import SparkContext
import json
import jieba

sc = SparkContext()

# 读取hdfs数据
rdd = sc.textFile('hdfs://node1:8020/data/baike_qa_valid.json')

# 对每行的json字符串转为字典
rdd_dict = rdd.map(lambda x:json.loads(x))

# 计算不同分类的问题数量
rdd_kv = rdd_dict.map(lambda x:(x['category'],1)).reduceByKey(lambda x,y:x+y)


# # 对title中的数据分词
# # 1-对title中的数据分词
rdd_cut = rdd_dict.map(lambda x:list(jieba.cut(x['title'])))
# print(rdd_cut.take(10))
# # 2-将这些数据合并成一个单一的序列
rdd_flatmap = rdd_cut.flatMap(lambda x:x)
# print(rdd_flatmap.take(20))
# # # 3-筛选条件,只保留长度大于1的单词
rdd_filter = rdd_flatmap.filter(lambda x:len(x)>1)
# print(rdd_filter.take(10))
# # 4-将每个单词转换成键值对
rdd_map = rdd_filter.map(lambda x:(x,1))
# print(rdd_map.take(10))
# # 5-对键值对进行聚合
rdd_reduce = rdd_map.reduceByKey(lambda x,y:x+y)
# print(rdd_reduce.take(10))
# # 6-对数据进行排序
rdd_sort = rdd_reduce.sortBy(lambda x:x[1],ascending=False)
print(rdd_sort.take(10))

第二种:通过链式操作

from pyspark import SparkContext
import json
import jieba

sc = SparkContext()

# 读取hdfs数据
rdd = sc.textFile('hdfs://node1:8020/data/baike_qa_valid.json')

# 对每行的json字符串转为字典
rdd_dict = rdd.map(lambda x:json.loads(x))

# 计算不同分类的问题数量
rdd_kv = rdd_dict.map(lambda x:(x['category'],1)).reduceByKey(lambda x,y:x+y)


# 统计问题中的热搜词,并获取的热搜词
# 对title中的数据分词
rdd_jieba = (rdd_dict.
             map(lambda x:list(jieba.cut(x['title']))).
             flatMap(lambda x:x).
             filter(lambda x:len(x)>1).
             map(lambda x:(x,1)).
             reduceByKey(lambda x,y:x+y).
             sortBy(lambda x:x[1],ascending=False))
#
# # 查看读取的数据

res3 = rdd_kv.collect()
print(res3)

res4 = rdd_jieba.take(10)
print(res4)

总结

因为数据量过大,所以使用collect()将会出现下面错误,可以使用take(),只查看前几条

### 回答1: 好的,下面是关于电商消费数据查询的练习: 1. 查询每个用户的总消费金额和总订单数。 2. 查询每个用户的平均每单消费金额和平均每天消费金额。 3. 查询每个用户的消费金额排名和订单数排名。 4. 查询每个用户的最近一次购买时间和最早一次购买时间。 5. 查询每个用户的购买频率和购买间隔时间。 6. 查询每个用户的购买商品种类数和购买商品品牌数。 7. 查询每个用户的购买商品类别排名和购买商品品牌排名。 8. 查询每个用户的购买商品数量排名和购买商品金额排名。 以上是一些常见的电商消费数据查询练习,可以通过hive或spark进行实现。 ### 回答2: 随着电商行业的不断发展,大量的消费数据已经积累了起来。通过对这些数据进行分析,可以帮助电商企业更好地了解消费者需求,在竞争中获取优势。 Hive和Spark是常用的数据处理工具,我们可以通过这两个工具对电商消费数据进行查询和分析。 首先,我们需要将电商消费数据导入到Hive或Spark中。如果数据已经存在于Hadoop或HDFS中,我们可以通过Hive的外部表或Spark的RDD载入数据。如果数据是以文件形式保存的,我们可以通过Hive或Spark的load命令将数据载入。在导入数据之前,我们需要先进行数据清洗和预处理,剔除无效数据并将数据按照一定格式保存。 接下来,我们可以通过Hive或Spark对电商消费数据进行查询分析,例如: 1. 商品销售排行榜查询 我们可以通过Hive或Spark统计商品的销售量,推出销售排行榜。具体操作如下: ```sql -- Hive示例 SELECT item_id, SUM(quantity) as total_sales FROM sales_data GROUP BY item_id ORDER BY total_sales DESC LIMIT 10; -- Spark示例 val sales_data = sc.textFile("hdfs://path/to/file") val item_sales = sales_data.map(line => (line.split(",")(1), line.split(",")(2).toDouble)) .reduceByKey(_ + _) .sortBy(_._2, false) .take(10) println(item_sales.mkString("\n")) ``` 2. 消费用户分析 我们可以通过Hive或Spark统计每个用户的消费情况,得到消费用户分析报表。具体操作如下: ```sql -- Hive示例 SELECT user_id, COUNT(DISTINCT order_id) as num_orders, SUM(amount) as total_spending FROM sales_data GROUP BY user_id ORDER BY total_spending DESC; -- Spark示例 val sales_data = sc.textFile("hdfs://path/to/file") val user_spending = sales_data.map(line => (line.split(",")(0), (1, line.split(",")(4).toDouble))) .reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2)) .sortBy(_._2._2, false) println(user_spending.collect().mkString("\n")) ``` 3. 地理位置分析 我们可以通过Hive或Spark统计不同地区销售额统计,得到地理位置分析报表。具体操作如下: ```sql -- Hive示例 SELECT province, SUM(amount) as total_sales FROM sales_data GROUP BY province ORDER BY total_sales DESC; -- Spark示例 val sales_data = sc.textFile("hdfs://path/to/file") val location_sales = sales_data.map(line => (line.split(",")(3), line.split(",")(4).toDouble)) .reduceByKey(_ + _) .sortBy(_._2, false) println(location_sales.collect().mkString("\n")) ``` 总的来说,通过Hive或Spark对电商消费数据进行查询分析,可以帮助电商企业更好地了解自己的市场、客户和产品,为企业制定决策提供有力支持。 ### 回答3: 电商消费数据一般包含用户、订单、商品等多种数据,其中包含了丰富的信息,如用户行为、热门商品、销售额等,对于电商企业而言,合理利用这些数据可以帮助企业做出更加明智的商业决策。因此,学习如何使用Hive/Spark查询电商消费数据是很有必要的。 首先针对电商消费数据,需要对数据进行清洗,提取所需数据信息。例如,可以通过Hive的读库、写库机制将数据导入Hive的数据仓库中。清洗后需要对数据进行预处理,包括去重、格式转换、字段筛选等操作。之后我们便可以利用Hive/Spark对这些数据进行查询和分析。 以Hive为例,常见操作包括对查询结果排序、分组、过滤等。例如,对于热门商品的查询,我们可以通过统计商品购买次数,将购买次数前10的商品筛选出来,以此得出热门商品清单。另外,我们还可以运用Hive的时间处理函数来实现按月份或季度对销售额进行统计,并对结果进行可视化展示。 对于Spark而言,除了常规的数据预处理操作之外,还可以运用数据挖掘和机器学习等技术,来实现更加深入的数据分析。Spark支持各种大数据分析库,如MLlib、GraphX等,因此可以实现大规模的分布式计算。例如,我们可以通过使用机器学习算法,对用户的行为模式进行分析,并据此精确预测用户需求,来改善销售和推广策略。 总的来说,电商消费数据查询是很复杂且有趣的,可以帮助企业更好地理解市场需求和客户行为,提高销售收益,提高市场竞争力。Hive和Spark大数据领域中常见的工具,以其高效性和所提供的各种数据转换和查询操作,帮助企业更加科学地使用和处理数据,并从而得到更精准和实时的分析结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值