对应视频40、41
课件3.3
启动pyspark:
pyspark --master spark://hadoop101:7077 --executor-memory 950m --executor-cores 2
读取hdfs上的文件创建一个dataframe
>>>df = spark.read.csv('/sql/customers.csv',header=True)
1、查看行数 2、查看数据的格式>>> df.dtypes
计算相关性系数之前,需要将数据格式转换为int,因为读取时候映射的是sting格式
>>>pdf = df.toPandas() # 将df转换为pandas的dataframe,注意Anaconda2-4.2.0里边的 pandas版本过低不支持该语句。
3、转换格式>>> pdf['Age'] = pdf['Age'].astype('int')
>>> pdf["Annual Income (k$)"]=pdf["Annual Income (k$)"].astype('int')
>>>pdf["Spending Score (1100)"]=pdf["Spending Score (1100)"].astype('int') #可能因为字段名太长的原因,这一句执行失败,"Spending Score (1100)"字段没有成果转换
转换以后:
也可以直接在spark的df上转换数据类型,如下:
df.select(df.Age.cast('int'),df["Spending Score (1-100)"].cast('int'),df["Annual Income (k$)"].cast("int")).dtypes
>>> df1 = spark.createDataframe(pdf) #创建spark的dataframe名为df1
>>> df1.corr("Age","Annual Income (k$)") #计算"Age","Annual Income (k$)"的相关系数
>>>pdf.columns=['CustomerID ','Genre' ,'Age','Annual Income (k$)','Spending'] #把"Spending Score (1100)"修改字段名为'Spending',这里必须把所有字段名列出来
再次转换'Spending'的格式
4、计算相关系数>>> df1 = spark.createDataframe(pdf)
>>> df1.corr("Spending","Annual Income (k$)") #皮尔森相关系数
df1.cov("Age","Annual Income (k$)") #计算两列的协方差
5、df.describe(*cols)查看指定列的描述性统计信息,包括基本的统计信息,包括数量、最大值、最小值、均值及标准差,不指定参数会默认计算所有列的描述统计信息。
>>> df.describe('Age')
Dataframe[summary: string, Age: string]
>>> df.describe('Age').show()
df.describe('Age','Genre').show()
#由于Genre(性别)的格式是string因此mean、stddev的值为null
>>> df.describe().show()
6、drop(*cols)按照列名删除df中的列,返回新的Dataframedf1 = df.drop('Age')



