连接spark
from pyspark.sql import SQLContext, SparkSession
url='local'spark = SparkSession.builder \
.master(urll) \
.appName("testdemo") \
.getOrCreate()
ctx = SQLContext(spark)
从csv文件读取数据转换成DataFrame数据类型
#pyspark从csv文件读取到d f
dfcsv= spark.read.format('csv').option('header','true').load('中学课程.csv')
dfcsv.show()
+---+-----------+------------------+--------+----------------+--------------------------+----+--------+-------------------------------------+
|_c0|question_id| 科目| 专项| 一级考点| 二级考点|学段|二级学段| stem|
+---+-----------+------------------+--------+----------------+--------------------------+----+--------+-------------------------------------+
| 0| 69963|教资教育知识与能力|中学课程| 课程组织| 课程内容|中学| |在教材编写过程中课程内容前后反复出...|
| 1| 69964|教资教育知识与能力|中学课程| 课程概述| 课程理论流派|中学| |主张课程内容的组织以儿童活动为中心...|
| 2| 69983|教资教育知识与能力|中学课程| 课程组织| 课程内容|中学| | 简述课程内容的三种文本表现形式1课...|
| 3| 70079|教资教育知识与能力|中学课程| 课程组织| 课程内容|中学| |简述课程计划的含义和内容课程计划是...|
| 4| 70090|教资教育知识与能力|中学课程| 课程概述| 课程的类型|中学| |在中学阶段开设的语文数学物理化学等...|
| 5| 70091|教资教育知识与能力|中学课程| 课程组织| 课程内容|中学| |编写教材教科书的直接依据是课程计划...|
#
结果
DataFrame[_c0: string, question_id: string, 科目: string, 专项: string, 一级考点: string, 二级考点: string, 学段: string, 二级学段: string, stem: string]
#查看列名
dfcsv.columns
Out[97]:
['_c0', 'question_id', '科目', '专项', '一级考点', '二级考点', '学段', '二级学段', 'stem']
删除某列
方法一
dfcsv.drop('_c0').drop(dfcsv.stem)
DataFrame[question_id: string, 科目: string, 专项: string, 一级考点: string, 二级考点: string, 学段: string, 二级学段: string]
列重命名 question-id:id, 科目:subject
dfcsv=dfcsv.withColumnRenamed("科目",'subject').withColumnRenamed("question_id",'id')
dfcsv
DataFrame[id: string, subject: string, 专项: string, 一级考点: string, 二级考点: string, 学段: string, 二级学段: string]
查看数据类型
dfcsv.dtypes
Out[125]:
[('id', 'string'),
('subject', 'string'),
('专项', 'string'),
('一级考点', 'string'),
('二级考点', 'string'),
('学段', 'string'),
('二级学段', 'string')]
查看前几行
In [129]:
dfcsv.take(3)
Out[129]:
[Row(id='69963', subject='教资教育知识与能力', 专项='中学课程', 一级考点='课程组织', 二级考点='课程内容', 学段='中学', 二级学段=' '),
Row(id='69964', subject='教资教育知识与能力', 专项='中学课程', 一级考点='课程概述', 二级考点='课程理论流派', 学段='中学', 二级学段=' '),
Row(id='69983', subject='教资教育知识与能力', 专项='中学课程', 一级考点='课程组织', 二级考点='课程内容', 学段='中学', 二级学段=' ')]
In [130]:
dfcsv.head(4)
Out[130]:
[Row(id='69963', subject='教资教育知识与能力', 专项='中学课程', 一级考点='课程组织', 二级考点='课程内容', 学段='中学', 二级学段=' '),
Row(id='69964', subject='教资教育知识与能力', 专项='中学课程', 一级考点='课程概述', 二级考点='课程理论流派', 学段='中学', 二级学段=' '),
Row(id='69983', subject='教资教育知识与能力', 专项='中学课程', 一级考点='课程组织', 二级考点='课程内容', 学段='中学', 二级学段=' '),
Row(id='70079', subject='教资教育知识与能力', 专项='中学课程', 一级考点='课程组织', 二级考点='课程内容', 学段='中学', 二级学段=' ')]
type(dfcsv)
Out[131]:
pyspark.sql.dataframe.DataFrame
修改数据类型
#更改数据类型ID-int
from pyspark.sql.types import IntegerType
dfcsv=dfcsv.withColumn("id",dfcsv['id'].cast(IntegerType()))
dfcsv
DataFrame[id: int, subject: string, 专项: string, 一级考点: string, 二级考点: string, 学段: string, 二级学段: string]
In [134]:
排序
dfcsv.sort('id',ascending=False)
#混合排序
dfcsv.sort(dfcsv.一级考点.desc(),dfcsv.二级考点.asc()).show()