python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS

需求

读取HDFS中CSV文件的指定列,并对列进行重命名,并保存回HDFS中

原数据展示

movies.csv
在这里插入图片描述

操作后数据展示

在这里插入图片描述

注:
write.format()支持输出的格式有 JSON、parquet、JDBC、orc、csv、text等文件格式
save()定义保存的位置,当我们保存成功后可以在保存位置的目录下看到文件,但是这个文件并不是一个文件而是一个目录

在这里插入图片描述

不用担心,这是没错的,我们读取的时候,并不需要使用文件夹里面的part-xxxx文件,直接读取目录即可

在这里插入图片描述

代码

# -*- coding: utf-8 -*-
from pyspark import SparkContext
from pyspark.sql import SparkSession
import json
import pandas as pd

'''
当需要把Spark DataFrame转换成Pandas DataFrame时,可以调用toPandas();
当需要从Pandas DataFrame创建Spark DataFrame时,可以采用createDataFrame(pandas_df)。
但是,需要注意的是,在调用这些操作之前,
需要首先把Spark的参数spark.sql.execution.arrow.enabled设置为true,
因为这个参数在默认情况下是false
'''

# 所需字段和新老字段映射关系
columns_json_str = '{"name":"影片名称","box_office":"票房"}'
columns_dict = json.loads(columns_json_str)

# 获取spark的上下文
sc = SparkContext('local', 'spark_file_conversion')
sc.setLogLevel('WARN')
spark = SparkSession.builder.getOrCreate()
spark.conf.set("spark.sql.execution.arrow.enabled", "true")

# 读取本地或HDFS上的文件【.load('hdfs://192.168.3.9:8020/input/movies.csv')】
df = spark.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load('hdfs://192.168.3.9:8020/input/movies.csv')
print(df.dtypes)

# 将spark.dataFrame转为pandas.DataFrame,在此处选取指定的列
df = pd.DataFrame(df.toPandas(),columns=columns_dict.keys())
print(df)

data_values=df.values.tolist()
data_coulumns=list(df.columns)

#将pandas.DataFrame转为spark.dataFrame,需要转数据和列名
df = spark.createDataFrame(data_values,data_coulumns)

# 字段重命名
# df = df.withColumnRenamed('name', '影片名称') 
for key in columns_dict.keys() :
    df = df.withColumnRenamed(key , columns_dict[key]);
print(df.collect())
print(df.printSchema())

# 将重命名之后的数据写入到文件
filepath = 'new_movies.csv'
df.write.format("csv").options(header='true', inferschema='true').save('hdfs://192.168.3.9:8020/input/' + filepath)

Git地址

https://github.com/gm19900510/data_analysis_python 欢迎star

posted on   疯狂的小萝卜头  阅读(4653)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示