【Python笔记】pyspark.sql.types

本文详细介绍了pyspark.sql.types模块中的各种数据类型,包括NullType、StringType、BinaryType等,并讲解了DataType类的方法如fromInternal、jsonValue等,以及如何构建和操作StructType。
部署运行你感兴趣的模型镜像


1 pyspark.sql.types.DataType

class pyspark.sql.types.DataType 

数据类型的基类。

1.1 fromInternal(obj)

将内部SQL对象转换为本机Python对象。

1.2 json()

1.3 jsonValue()

1.4 needConversion()

这种类型是否需要在Python对象和内部SQL对象之间进行转换?
这用于避免ArrayType / MapType / StructType的不必要的转换。

1.5 simpleString()

1.6 toInternal(obj)

将Python对象转换为内部SQL对象。

2 pyspark.sql.types.NullType

class pyspark.sql.types.NullType

Null类型
表示无的数据类型,用于无法推断的类型。

3 pyspark.sql.types.StringType

class pyspark.sql.types.StringType

String 数据类型。

4 pyspark.sql.types.BinaryType

class pyspark.sql.types.BinaryType

二进制(字节数组)数据类型。

5 pyspark.sql.types.BooleanType

class pyspark.sql.types.BooleanType

Boolean 数据类型。

6 pyspark.sql.types.DateType

class pyspark.sql.types.DateType

Date (datetime.date) 数据类型。

7 pyspark.sql.types.TimestampType

class pyspark.sql.types.TimestampType

Timestamp (datetime.datetime) 数据类型。

8 pyspark.sql.types.DecimalType

class pyspark.sql.types.DecimalType(precision=10, scale=0)

Decimal (decimal.Decimal) 数据类型。

DecimalType必须具有固定的精度(最大总位数)和比例(点右边的位数)。 例如,(5,2)可以支持[-999.99至999.99]之间的值。
precision可以达到38,scale要小于或等于precision。
创建DecimalType时,默认的precision和scale是(10,0)。 当从十进制对象中推断模式时,它将是DecimalType(38,18)

参数:

  • precision – 最大的总位数 (默认: 10)
  • scale – 点右侧的位数 (默认: 0)

9 pyspark.sql.types.DoubleType

class pyspark.sql.types.DoubleType

Double 数据类型,表示双精度浮点数。

10 pyspark.sql.types.FloatType

class pyspark.sql.types.FloatType

Float数据类型,表示单精度浮点数。

11 pyspark.sql.types.ByteType

class pyspark.sql.types.ByteType

Byte 数据类型,即单个字节中的有符号整数。

12 pyspark.sql.types.IntegerType

class pyspark.sql.types.IntegerType

Int数据类型,即有符号的32位整数。

13 pyspark.sql.types.LongType

class pyspark.sql.types.LongType

Long数据类型,即有符号的64位整数。
如果数值超出[-9223372036854775808,9223372036854775807]的范围,请使用DecimalType。

14 pyspark.sql.types.ShortType

class pyspark.sql.types.ShortType

Short数据类型,即有符号的16位整数。

15 pyspark.sql.types.ArrayType

class pyspark.sql.types.ArrayType(elementType, containsNull=True)

数组数据类型。

参数:

  • elementType – 数组中每个元素的DataType
  • containsNull – 布尔值,数组是否可以包含null(None)值

16 pyspark.sql.types.MapType

class pyspark.sql.types.MapType(keyType, valueType, valueContainsNull=True)

Map数据类型。

参数:

  • keyType – map中key的数据类型
  • valueType – map中value的数据类型
  • valueContainsNull – 指示values是否可以包含null(无)值

map数据类型中的键不允许为null(无)。

17 pyspark.sql.types.StructField

class pyspark.sql.types.StructField(name, dataType, nullable=True, metadata=None)

StructType中的一个字段。

参数:

  • name – 字符串,字段的名称。
  • dataType – 字段的数据类型。
  • nullable – boolean,该字段是否可以为null(None)。
  • metadata – 从字符串到简单类型的字典,可以自动内部转到JSON

18 pyspark.sql.types.StructType

class pyspark.sql.types.ArrayType(elementType, containsNull=True)

结构类型,由StructField的列表组成。
这是表示一个行的数据类型。

18.1 add

add(field, data_type=None, nullable=True, metadata=None)

通过添加新元素来构造一个StructType来定义schema。 该方法接受:

  • a:一个参数是一个StructField对象
  • b:介于2到4之间的参数(name,data_type,nullable(可选),metadata(可选))。data_type参数可以是String或DataType对象。
>>> from pyspark.sql.types import *
>>> struct1 = StructType().add("f1", StringType(), True).add("f2", StringType(), True, None)
>>> struct2 = StructType([StructField("f1", StringType(), True),StructField("f2", StringType(), True, None)])
>>> struct1 == struct2
True
>>> struct1 = StructType().add(StructField("f1", StringType(), True))
>>> struct2 = StructType([StructField("f1", StringType(), True)])
>>> struct1 == struct2
True
>>> struct1 = StructType().add("f1", "string", True)
>>> struct2 = StructType([StructField("f1", StringType(), True)])
>>> struct1 == struct2
True

参数:

  • field – 字段的名称或者StructField对象
  • data_type – 如果存在,则创建StructField的DataType
  • nullable – 要添加的字段是否可以是nullable (默认True)
  • metadata – 任何其他元数据(默认无)

返回:一个新的更新的StructType

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

任务描述 我们这里有一部分学生在 2019 年 7 月 1 日 - 2019 年 11 月 30 日的消费数据,接下来我们需要对其进行分析,从而得出我们想要的数据。 本关任务:统计每个月男女生使用各种支付方式的次数以及该月该方式的总次数。 使用 Spark 结合学生个人信息、学生消费数据来统计每个月男女生使用各种支付方式的次数以及该月该方式的总次数,最后结果按年份和总次数升序排序; 将查询结果存放 MySQL 数据库 mydb 的 pay_number 表中。 查询结果样例如下: date pay malesnumber femalesnumber num 2019-07 信用卡 142 137 279 2019-07 其它 287 252 539 2019-07 银行卡 402 376 778 2019-07 现金 656 681 1337 2019-07 微信 1923 2037 3960 2019-07 支付宝 3279 3498 6777 数据说明 学生个人信息: 文件所在位置:/data/workspace/myshixun/files/info.csv; 文件部分数据展示如下: id,name,birth,sex,address,idcard,phone,email 514,任秀珍,2000-05-13,女,新疆维吾尔自治区巢湖县永川惠州路q座 286547,52**************64,187****1357,juanye@15.cn 516,何建,2000-01-06,男,天津市金凤市怀柔王街y座 815599,61**************99,150****6795,span@20.cn 字段说明: 字段名 说明 id 学号 name 姓名 birth 出生日期 address 地址 idcard 身份证号 phone 手机号 email 邮箱 学生消费信息: 文件所在位置:/data/workspace/myshixun/files/consume.csv; 文件部分数据展示如下(使用 $ 分隔): id$consume$price$category$date$pay 8080$无印良品 MUJI 长条诗笺型笔记表格,白色 40枚 14行$10.0$无印良品 MUJI 系列$2019-09-17 15:10:44$其它 3800$小米CC9 3200万美颜自拍 索尼4800万超清三摄 多功能NFC,4030mAh 深蓝星球 6GB+64GB 游戏智能拍照手机$1799.0$小米手机$2019-08-19 18:28:26$支付宝 字段说明如下: 字段名 说明 id 学号 consume 消费内容 price 消费金额 category 消费的商品类别 date 消费时间 pay 支付方式 MySQL 数据库 mydb: 用户名:root; 密码:123123。 pay_number 表结构: 字段名 含义 数据存储类型 pay 支付方式 varchar(255) month 月份(格式:2019-10) varchar(255) malesnumber 男生使用次数 bigint femalesnumber 女生使用次数 bigint num 该月总次数 bigint 测试说明 本关考察的是同学们的 Spark 实践操作,在右侧编辑器中编写代码,平台对你的代码进行测试,如果查询结果与预期输出一致,则算通关。 开始你的任务吧,祝你成功! import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SaveMode; import org.apache.spark.sql.SparkSession; import org.apache.spark.sql.api.java.UDF1; import org.apache.spark.sql.types.DataTypes; public class PayNumber { public static void main(String[] args) { /********** Begin **********/ SparkSession spark = SparkSession.builder().master("local").appName("PayNumber").getOrCreate(); spark.stop(); /********** End **********/ } }
最新发布
10-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值