pyspark.sql.DataFrame-统计

继上篇DF中agg介绍之后,继续极少DF methods

注册一个临时表:

  • 1 createGlobalTempView :创建了一个全局的临时表
    • 对应于dropGlobalTempView
      spark.catalog.dropGlobalTempView("table_name")
  • 2.createOrReplaceTempView()& createTempView()
    • 对应于
      spark.catalog.dropGlobalTempView()
      spark.catalog.dropTempView()
  • 注册临时表之后,可以使用spark.sql()中对临时表写SQL语句,创建新的DF
from pyspark.sql import SparkSession
spark=SparkSession.bulider.getOrCreate()
#假设。。。我们已经有了一个DF
df.createGlobalTempView("temp_table")
df_anothor=spark.sql("select * from global_temp.temp_table")
#若是local的temp_table ,sql的方式
#df_local=spark.sql("select * from temp_table")
spark.catalog.dropGlobalTempView("temp_table")

统计描述


from pyspark.sql import SparkSession
spark=SparkSession.builder.getOrCreate()
data=[1,2,3,4,5]
df=spark.createDataFrame(data)
提示错误:
Can not infer schema for type:

  • 但是createDataFrame 中说过,createDataFrame(data,schema) ,其中data可以是list,rddpandas.DF ;schema可以是变量名列表显示定义的类型以及默认(自行推断)

  • so why error? 仔细阅读error can not info schema 那我们显示的来定义试一下

from pyspark.sql import SparkSession 
from pyspark.sql.types import *
spark=SparkSession.builder.getOrCreate()
data=[1,2,3,4,5]
schema=IntegerType()
df=spark.createDataFrame(data,schema)
#work,done

说回正题 crossJoin

lst1=[1,2,3,4,5]                             
lst2=[2,3,4,5,6]
df1=spark.createDataFrame(lst1,IntegerType())
df2=spark.createDataFrame(lst2,IntegerType())
df_join=df1.crossJoin(df1)
df_join.show()

修改列名的问题

  • crossJoin得到的结果df_join 如下:
    df_join
    可以看到列名是相同的,这对df使用是极不方便的。如何修改列名 ?

method of modify column’s name

  • 1 withColumnRenamed
old_columns=df_join.schema.name
new_columns=["you can definate"]
df=reduce(lambda df_join,idx:data.withColumnRenamed(old_columns[idx],new_columns[idx]),xrange(len(old_columns)),df_join)
  • 2 在join 之前需要修改列名

  • 3 确定每个col实际上属于哪一个df 使用alias修改

df_new_join=df_join.select(df1.value.alias("v1"),df2.value.alias("v2"))

相关系数&协方差(corr,cov)

  • DF.corr(col_name1,col_name2)

  • DF.cov(col_name1,col_name2)

列联表 crosstab

  • 作用: 统计某一个变量(y)各类中,制定特征x的分布。
from pyspark.sql.types import *
y=[1,0,1,0,1,1,0,0]
x=["a","a","c","a","b","b","c","a"]
data=[(y[i],x[i]) for i in xrange(len(x))]
df=spark.createDataFrame(data,["y","x"])
df.crosstab("y","x").show()

crosstab的结果
适合于特征的选择,查看x这维特征是否对y值有显著差别

频繁项

  • 寻找某一列或者某几列的出现频繁的项,同时,多列联合的频繁项集也可以找出。
from pyspark.sql.Functions import struct
df.withColumns("xy",struct('y','x')).freqItems(["xy"],0.3).collect()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值