PySpark DataFrame

在python中 RDD需要从Py4j 启动一个 JVM, 所有的RDD转换最开始都要映射到 JAVA中的pythonRDD对象,

所以 Python和JVM之间的频繁切换,通信会有很多的而外开销。

 

Dataframe 则提高了PySpark的查询性能


Table of Contents

创建DataFrame

JSON转DataFrame

Pandas与DataFrame的转换

DataFrame SQL查询

DataFrame的schema(模式)


创建DataFrame

Dataframe 需要首先建立SparkSession

from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

 

JSON转DataFrame

这里df 是JSON格式的RDD

df = spark.read.json(your_JSON_file)

 

创建临时表

df.createOrReplaceTempView('df')

Spark 是惰性的,只有创建临时表之后,dataframe才会被执行

 

Pandas与DataFrame的转换

#Spark to pandas
df.toPandas()

#pandas to Spark
spark_dataframe = spark.createDataFrame(df)

 

但是在转换时要确定pandas的数据类型是不是spark所支持的,如果spark 推断不了数据类型, 需要手动编辑schema

 

DataFrame SQL查询

spark.sql('your sql query').collect()

这里collect()会返回所有的结果, take(n),和show(n)应该会有更好的性能

 

DataFrame的schema(模式)

DataFrame的schema 可以通过refection 推断出数据的schema,通过printSchema() 可以查看你的shcama

df.printSchema()

 有的时候,我们也可以手动设定schema 以保证数据有正确的格式

from pyspark.sql.types import *

schema = StructType(
[
StructField('id',LongType(),True,
StructField('name',StringType(),True
]
)

StructType将schema组成一个list, 然后StrucField()来定义每一列的格式, 里面包含三个参数

Creates a StructField
:param name: the name of this field. 名子
:param dataType: the data type of this field.  格式
:param nullable: indicates whether values of this field  是否可为空值
                 can be null.

然后利用我们编辑好的Schema来生成DataFrame

df = spark.createDataFrame(yourfile,schema)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值