pyspark:pandas与spark的dataframe转换,通过sql语句间接对pandas的dataframe进行处理

这里主要使用pyspark

生成pandas的DataFrame和spark(pyspark)下的DataFrame

        1.导入相应的库,和类,生成相应的对象:

import pandas as pd
#print(pd.__version__)验证pandas库是否配置时使用
from pyspark.sql import SparkSession
from pyspark import SparkConf
spark = SparkSession.builder.config(conf=SparkConf()).getOrCreate()

        2.pandas 创建dataframe,并打印类型        

dict_data= {'id':[1,2,3,4,5,6],\
            'name':['Alice','Bob','Cindy',\
            'Eric','Helen','Grace '],\
            'math':[90,89,99,78,97,93],\
            'english':[89,94,80,94,94,90]}
pandasDF_in = pd.DataFrame(dict_data)
print(type(pandasDF_in))

       输出: >>><class 'pandas.core.frame.DataFrame'>

        3.Pyspark 创建datafrmame,并打印类型

sparkDF_in = spark.createDataFrame([(1,"spark"),(2,"hadoop")\
    ,(3,"scala"),(4,"java"),(5,"python")\
    ,(6,"spark"),(7,"java"),(8,"java"),(9,"python")\
    ,(10,"python")]\
    ,["id","category"])
print(type(sparkDF_in))

        输出:>>><class 'pyspark.sql.dataframe.DataFrame'>

&1:pyspark的dataframe和pandas的dataframe的转换已经验证

pandasDF_out = spark.createDataFrame(pandasDF_in)
print(type(pandasDF_out))
# %%
sparkDF_out = sparkDF_in.toPandas()
print(type(sparkDF_out))

输出结果为:<class 'pyspark.sql.dataframe.DataFrame'>

                     <class 'pandas.core.frame.DataFrame'>

&2.通过pyspark.Sql来间接使用sql语句,操作pandas的dataframe,并将结果转为pandas的

      dataframe

pandasDF_out.createOrReplaceTempView("pd_data")
# %%
spark.sql("select * from pd_data").show()
# %%
res = spark.sql("""select * from pd_data 
                where math>= 90 
                order by english desc""")
res.show()
# %%
output_DF = res.toPandas()
print(type(output_DF))

        上述以pandasDF_out为例:

        1)创建临时表

        2)对临时表进行查询全部,输出结果如下,即为pandas生成的原始数据:

                        

        3)使用sql对于对上表进行处理,sql语句为:

                select * from pd_data where math>= 90 order by english desc

                查询的结果展示为:

         4)再转换为pandas的dataframe操作,执行pandas。DataFrame的相关处理。

output_DF = res.toPandas()
print(type(output_DF))

                     <class 'pandas.core.frame.DataFrame'>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值