Python--PySpark 综合案例

### PySpark 综合案例笔记

#### 环境配置
1. **Python环境**:指定Python解释器路径。
   ```python
   os.environ['PYSPARK_PYTHON'] = '/export/server/anaconda3/bin/python'
   ```
2. **Hadoop环境**:指定Hadoop安装路径。
   ```python
   os.environ['HADOOP_HOME'] = "/export/server/hadoop-3.3.1"
   ```

#### SparkContext 初始化
1. **配置SparkConf**:
   - 设置应用名称。
   - 设置默认并行度为24,适合集群模式。
   ```python
   conf = SparkConf().setAppName("spark_cluster")
   conf.set("spark.default.parallelism", "24")
   ```
2. **创建SparkContext**:
   ```python
   sc = SparkContext(conf=conf)
   ```

#### 需求实现

##### 需求1:热门搜索时间段Top3(小时精度)
1. **读取文件**:将文件内容读取为RDD。
   ```python
   file_rdd = sc.textFile("hdfs://m1:8020/data/search_log.txt")
   ```
2. **处理数据**:
   - 取出时间并转换为小时。
   - 转换为(小时, 1)的二元组。
   - Key分组聚合Value。
   - 排序(降序)。
   - 取前3。
   ```python
   result1 = file_rdd.map(lambda x: (x.split("\t")[0][:2], 1)).\
       reduceByKey(lambda a, b: a + b).\ 
       sortBy(lambda x: x[1], ascending=False, numPartitions=1).\ 
       take(3)
   print("需求1的结果:", result1)
   ```

##### 需求2:热门搜索词Top3
1. **处理数据**:
   - 取出搜索词。
   - 转换为(词, 1)的二元组。
   - 分组聚合。
   - 排序。
   - Top3。
   ```python
   result2 = file_rdd.map(lambda x: (x.split("\t")[2], 1)).\
       reduceByKey(lambda a, b: a + b).\ 
       sortBy(lambda x: x[1], ascending=False, numPartitions=1).\ 
       take(3)
   print("需求2的结果:", result2)
   ```

##### 需求3:统计“黑马程序员”关键字在什么时段被搜索的最多
1. **处理数据**:
   - 过滤内容,只保留“黑马程序员”关键词。
   - 转换为(小时, 1)的二元组。
   - Key分组聚合Value。
   - 排序(降序)。
   - 取前1。
   ```python
   result3 = file_rdd.map(lambda x: x.split("\t")).\
       filter(lambda x: x[2] == '黑马程序员').\
       map(lambda x: (x[0][:2], 1)).\
       reduceByKey(lambda a, b: a + b).\ 
       sortBy(lambda x: x[1], ascending=False, numPartitions=1).\ 
       take(1)
   print("需求3的结果:", result3)
   ```

##### 需求4:将数据转换为JSON格式,写出到文件中
1. **转换为JSON格式的RDD**:
   - 将每行数据转换为字典格式。
   - 转换为JSON字符串。
   ```python
   file_rdd.map(lambda x: x.split("\t")).\
       map(lambda x: {"time": x[0], "user_id": x[1], "key_word": x[2], "rank1": x[3], "rank2": x[4], "url": x[5]}).\ 
       saveAsTextFile("hdfs://m1:8020/output/output_json")
   ```

#### 总结
- **数据读取**:使用`textFile`方法读取HDFS上的文本文件。
- **数据处理**:通过`map`、`filter`、`reduceByKey`、`sortBy`等方法进行数据转换和聚合。
- **结果输出**:使用`take`方法获取结果,使用`saveAsTextFile`方法将结果写入HDFS上的文件。
- **注意事项**:
  - 在集群模式下,设置合适的并行度可以提高数据处理效率。
  - 使用`numPartitions=1`确保数据在单个分区中进行排序和聚合,避免数据在多个分区中分布导致的不一致性。
  - 将数据转换为JSON格式时,确保每个字段都正确映射到字典中。

通过这个案例,可以深入理解PySpark的基本操作和数据处理流程,为更复杂的大数据处理任务打下基础。
 


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值