#在程序中添加一以下代码
import findspark
from pyspark.sql.types import StructType, StructField, StringType
findspark.init()
from pyspark import SparkContext,SparkConf
from pyspark.sql import SparkSession
spark = SparkSession.\
builder.\
master("local").\
appName ("Python Spark SQL Hive integration example").getOrCreate()
'''
1 读取数据
data=spark.read.format("csv").load("file:///opt/module/datas/student.txt")
或者:
data=spark.read.csv("file:///opt/module/datas/student.txt")
# 展示数据
data.show()
# 读取csv数据,系统会自动切割数据
data1=spark.read.format("csv").load("/hive/company/dept/dept.txt",delimiter=',',encoding='utf-8')
data1.show()
2 列名重命名
data1.withColumnRenamed("_c0",["a","b","c"])
3.读取参数
3.1 header
3.2 delimiter
3.3 encoding
'''
# data1=spark.read.format("csv").load("/hive/company/dept/dept.txt")
# header=True代表将头作为列名
# data1=spark.read.csv("/hive/company/dept/dept.txt",header=True)
schema = StructType([
StructField("id", StringType(), True),
StructField("deptname", StringType(), True), # nullable=True代表此字段的值不为空
StructField("salary", StringType(), True)
])
# data1=spark.read.options(delimiter='\t').csv("/hive/company/dept/dept.txt",schema=schema)
# 等同于下面的语句
data1=spark.read.format("csv").load("/hive/company/dept/dept.txt",delimiter='\t',encoding='utf-8',schema=schema)
data1.show()
# 查询数据
data1.select(data1['deptname']).show()
# 条件过滤查询
1,'查询deptname中含有人的数据'
data1.filter(data1['deptname'].contains)
2,'查询id等于10'
data1.filter(data1['id']==10).show()
3,'查询在列表的数据'
data1.filter(data1['deptname'].isin(['销售部']))
4,'查询含有某个数据的数据'
data1.filter(data1['deptname'].contains("销售"))
5,'使用分组查询'
data1.groupby(data1['salary']).agg('count')
6,'使用desc'
data1.describe(['id']).show()
7,'使用表达式--只能使用符号,is null ,is not null'
data1.filter("id == 10 or deptname == '销售部'")
8,'判断为空'
data1.filter('id is not null')
data1.filter(data1['id'].isNotNull())
#排序
data1.sort(data1['id'].desc())
data1.sort(data1['id'].asc())
8,'分组聚合'
data1.groupby(data1['salary']).agg({"id":"count","deptname":"max"})
# first: 该方法获取DataFrame的第1行记录。
# head: 该方法获取DataFrame的前n nn行记录。该方法只适用于DataFrame数据量较小,且所有数据都保存在内存中的情况。
# take: 获取DataFrame的前n nn行记录。
# tail: 获取DataFrame的后n nn行记录
Py Spark Data Frame 操作
最新推荐文章于 2024-06-15 06:34:43 发布